Go の POST リクエストで JSON 文字列を送信する
Jay Singh
2023年1月30日
JavaScript Object Notation(JSON)は、Web 開発で一般的に使用されるデータ送信形式です。使い方も理解も簡単です。
Go 言語を使用して JSONPOST
リクエストを作成できますが、いくつかの Go パッケージをインポートする必要があります。net/HTTP
パッケージには、優れた HTTP クライアントとサーバーのサポートが含まれています。
Go の JSON
パッケージは、JSON のエンコードとデコードも提供します。
このチュートリアルでは、Go 言語を使用して JSONPOST リクエストを実行する方法を学習します。このチュートリアルでは、Go 言語を使用して JSON 文字列を POST リクエストとして配信する方法を学習します。
Go の POST リクエストで JSON 文字列を送信する
コースとパスのリストを含む基本的な JSON ファイルを以下に示します。
{
"Courses": [
"Golang",
"Python"
],
"Paths": [
"Coding Interviews",
"Data Structure"
]
}
以下のコードは、USER JSON オブジェクトをサービス reqres.in
に送信して、ユーザーリクエストを作成する方法を示しています。
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type User struct {
Name string `json:"name"`
Job string `json:"job"`
}
func main(){
user := User{
Name: "Jay Singh",
Job: "Golang Developer",
}
body, _ := json.Marshal(user)
resp, err := http.Post("https://reqres.in/api/users", "application/json", bytes.NewBuffer(body) )
if err != nil {
panic(err)
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusCreated {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
jsonStr := string(body)
fmt.Println("Response: ", jsonStr)
} else {
fmt.Println("Get failed with error: ", resp.Status)
}
}
出力:
Response: {
"name":"Jay Singh",
"job":"Golang Developer",
"id":"895",
"createdAt":"2022-04-04T10:46:36.892Z"
}
Golang の POST リクエストで JSON 文字列を送信する
これが簡単な JSON コードです。
{
"StudentName": "Jay Singh",
"StudentId" : "192865782",
"StudentGroup": "Computer Science"
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type StudentDetails struct {
StudentName string `json:"StudentName"`
StudentId string `json:"StudentId"`
StudentGroup string `json:"StudentGroup"`
}
func main() {
studentDetails := StudentDetails{
StudentName: "Jay Singh",
StudentId: "192865782",
StudentGroup: "Computer Science",
}
body, _ := json.Marshal(studentDetails)
resp, err := http.Post("<https://reqres.in/api/users>", "application/json", bytes.NewBuffer(body))
if err != nil {
panic(err)
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusCreated {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
jsonStr := string(body)
fmt.Println("Response: ", jsonStr)
} else {
fmt.Println("Get failed with error: ", resp.Status)
}
}
出力:
Response: {
"StudentName":"Deven Rathore",
"StudentId":"170203065",
"StudentGroup":"Computer Science",
"id":"868",
"createdAt":"2022-04-04T12:35:03.092Z"
}