概要
以下は自分用のメモです。よく忘れるので、ここにメモメモ。。
Getリクエスト
// // http.Get() を使って HTTP GET リクエストを試してみるサンプルです。 // // リクエストの発行先は JSONPlaceholder (https://jsonplaceholder.typicode.com/) を // 使わせてもらっています。 // // REFERENCES: // - https://dev.to/devkiran/make-an-http-get-request-in-go-58gf // package main import ( "encoding/json" "fmt" "log" "net/http" "os" ) type Post struct { UserId int `json:"userId"` Id int `json:"id"` Title string `json:"title"` Body string `json:"body"` } func (me *Post) String() string { return fmt.Sprintf("Uid: %d, Id: %d, Title: %s..., Body: %s...", me.UserId, me.Id, me.Title[:5], me.Body[:5]) } const ( url = "https://jsonplaceholder.typicode.com/posts/1" ) var ( appLog = log.New(os.Stderr, "", 0) errLog = log.New(os.Stderr, "[Error] ", 0) ) func main() { // ------------------------------------------- // Send http GET request // ------------------------------------------- res, err := http.Get(url) if err != nil { errLog.Println(err) return } defer res.Body.Close() // ------------------------------------------- // Check http status code // ------------------------------------------- if res.StatusCode != http.StatusOK { errLog.Printf("http status code: %d", res.StatusCode) return } // ------------------------------------------- // Decode response to JSON // ------------------------------------------- var ( post = &Post{} decoder = json.NewDecoder(res.Body) ) err = decoder.Decode(post) if err != nil { errLog.Println(err) return } // ------------------------------------------- // Show results // ------------------------------------------- appLog.Printf("status: %d, resonse: %s\n", res.StatusCode, post) }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ go run cmd/httpget/main.go status: 200, resonse: Uid: 1, Id: 1, Title: sunt ..., Body: quia ...
try-golang/main.go at master · devlights/try-golang · GitHub
POSTリクエスト
// // http.NewRequest() を使って HTTP POST リクエストを試してみるサンプルです。 // // リクエストの発行先は JSONPlaceholder (https://jsonplaceholder.typicode.com/) を // 使わせてもらっています。 // // REFERENCES: // - https://dev.to/devkiran/make-an-http-post-request-in-go-29p // package main import ( "bytes" "encoding/json" "fmt" "log" "net/http" "os" ) type ( Post struct { UserId int `json:"userId"` Id int `json:"id"` Title string `json:"title"` Body string `json:"body"` } ) func (me *Post) String() string { return fmt.Sprintf("Uid: %d, Id: %d, Title: %s, Body: %s", me.UserId, me.Id, me.Title, me.Body) } const ( method = "POST" url = "https://jsonplaceholder.typicode.com/posts" contentType = "application/json" ) var ( appLog = log.New(os.Stdout, "", 0) errLog = log.New(os.Stderr, "[Error] ", 0) ) func main() { // ------------------------------------------- // Create request and set headers // ------------------------------------------- var ( body = []byte(`{"userId": 999, "title": "try-golang", "body": "try-golang/cmd/httppost"}`) buf = bytes.NewBuffer(body) ) req, err := http.NewRequest(method, url, buf) if err != nil { errLog.Println(err) return } req.Header.Add("Content-Type", contentType) // ------------------------------------------- // Send http POST request // ------------------------------------------- var ( client = &http.Client{} ) res, err := client.Do(req) if err != nil { errLog.Println(err) return } defer res.Body.Close() // ------------------------------------------- // Check http status code // ------------------------------------------- if res.StatusCode != http.StatusCreated { errLog.Printf("http status code: %d", res.StatusCode) return } // ------------------------------------------- // Decode response to JSON // ------------------------------------------- var ( post = &Post{} decoder = json.NewDecoder(res.Body) ) err = decoder.Decode(post) if err != nil { errLog.Println(err) return } // ------------------------------------------- // Show results // ------------------------------------------- appLog.Printf("status: %d, resonse: %s\n", res.StatusCode, post) }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ go run cmd/httppost/main.go status: 201, resonse: Uid: 999, Id: 101, Title: try-golang, Body: try-golang/cmd/httppost
try-golang/main.go at master · devlights/try-golang · GitHub
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。