goで外部のAPIからデータを取得した場合にはnet/httpパッケージを利用します
参照)https://pkg.go.dev/net/http
例えば下記のようなjsonファイルを返すAPIがあるとします
{
user_id:"1",
user_name:"Tanaka"
}
その場合、下記のようにすることで取得できる
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, err := http.Get("対象のURL")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
この結果はレスポンスから{user_id:”1″,user_name:”Tanaka”}が返却されます
Postメソッドの場合は
resp, err := http.Post("対象のURL","ContentType",body)
で取得できる
bodyは、io.Readerに変換する必要があるためstrings.NewReaderなどを使用して変換する必要があるため下記のようにする。
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader("{'key':'value'}")
resp, err := http.Post("対象のURL", "applicatoin/json", body)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
resBody, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(resBody))
}
ほかにもGet、Postメソッド以外にもhttp.NewRequest(“GET”, “http://example.com”, nil)とすることでリクエストが行える
client := &http.Client{}
req, _ := http.NewRequest("GET", "対象のURL", nil)
// ヘッダを追加する場合は下記のようにする
req.Header.Add("If-None-Match", `W/"wyzzy"`)
resp, err := client.Do(req)