[go] HTTP GET 요청 처리하기

Go 언어를 사용하면 HTTP 클라이언트를 만들고 서버에 GET 요청을 보내는 것이 매우 간단합니다. 이를 통해 웹 서버에서 데이터를 검색하거나 외부 API와 상호 작용할 수 있습니다.

HTTP GET 요청 보내기

Go 언어의 내장된 net/http 패키지를 사용하여 HTTP GET 요청을 보낼 수 있습니다. 예를 들어, “https://api.example.com/data”에 GET 요청을 보내고 응답을 처리하는 방법은 다음과 같습니다.

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    response, err := http.Get("https://api.example.com/data")
    if err != nil {
        fmt.Println("GET request failed:", err)
        return
    }
    defer response.Body.Close()

    data, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Failed to read response body:", err)
        return
    }

    fmt.Println(string(data))
}

위의 예제에서는 http.Get 함수를 사용하여 GET 요청을 보내고, ioutil.ReadAll 함수를 사용하여 응답 바디를 읽어옵니다.

요청에 헤더 추가하기

HTTP 요청에 헤더를 추가하여 추가적인 정보를 보낼 수 있습니다. 예를 들어, “Accept” 헤더를 사용하여 API가 JSON 형식의 응답을 보내도록 요청하는 방법은 다음과 같습니다.

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    req, err := http.NewRequest("GET", "https://api.example.com/data", nil)
    if err != nil {
        fmt.Println("Failed to create request:", err)
        return
    }
    req.Header.Set("Accept", "application/json")

    client := &http.Client{}
    response, err := client.Do(req)
    if err != nil {
        fmt.Println("GET request failed:", err)
        return
    }
    defer response.Body.Close()

    data, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Failed to read response body:", err)
        return
    }

    fmt.Println(string(data))
}

위의 예제에서는 http.NewRequest 함수를 사용하여 새로운 Request 객체를 생성하고, 이 객체에 “Accept” 헤더를 추가한 후 client.Do 메서드를 사용하여 요청을 전송합니다.

요청에 쿼리 파라미터 추가하기

GET 요청에 쿼리 파라미터를 추가하여 요청하는 방법은 url을 구성할 때 직접 추가하면 됩니다.

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "net/url"
)

func main() {
    baseURL := "https://api.example.com/data"
    u, err := url.Parse(baseURL)
    if err != nil {
        fmt.Println("Failed to parse URL:", err)
        return
    }

    q := u.Query()
    q.Set("key1", "value1")
    q.Set("key2", "value2")

    u.RawQuery = q.Encode()

    response, err := http.Get(u.String())
    if err != nil {
        fmt.Println("GET request failed:", err)
        return
    }
    defer response.Body.Close()

    data, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Failed to read response body:", err)
        return
    }

    fmt.Println(string(data))
}

위의 예제에서는 url.Parse 함수로 baseURL을 parsing한 후, url.Values를 사용하여 쿼리 파라미터를 추가하고, u.RawQuery를 사용하여 해당 url로 요청을 보냅니다.

이제 Go를 사용하여 HTTP GET 요청을 보내고, 직접 처리해보세요!

참고 자료