メモの日々


2021年03月19日(金) [長年日記]

[go] http.Clientのサンプル

http.Clientを使うサンプルをメモ。GitHubのリポジトリ情報取得のAPIにアクセスしてみる。

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
)

func main() {
	// http.Requestのインスタンスreqを作って
	req, err := http.NewRequest(
		"GET",
		"https://api.github.com/repos/kenichiice/test-unit-runner-junitxml",
		nil)
	if err != nil {
		log.Fatal("failed to create HTTP request")
	}

	// reqにHTTPヘッダを追加して
	req.Header.Set("Accept", "application/vnd.github.v3+json")

	// http.Clientを使ってreqの内容を送信する
	client := http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal("failed to send HTTP request")
	}

	// HTTP応答のBodyを読み取る場合はCloseが必要
	defer resp.Body.Close()

	// HTTP応答のステータスコードの確認
	if resp.StatusCode != http.StatusOK {
		log.Fatalf("HTTP status code: %d", resp.StatusCode)
	}

	// HTTP応答のBodyのJSONを読み取る
	var repo struct {
		Description string
	}
	if err := json.NewDecoder(resp.Body).Decode(&repo); err != nil {
		log.Fatal("failed to decode HTTP response")
	}

	fmt.Println(repo.Description)
}