Gin って?
GinはGo言語でウェブAPIを作成するためのフレームワークです。
簡単にかけるのにパフォーマンスも良い!
そんな理由で人気のあるフレームワークです。
使い方
俯瞰して見られるように全体のコードを乗せておきます。
サッと流し見をしてから、詳細を見ていきましょう。
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
var users []User
func main() {
server := gin.Default()
server.GET("/score", getUsers) // GetのAPIを登録
server.POST("/score", addScores) // PostのAPIを登録
err := server.Run(":8080")
if err != nil {
fmt.Println("Error starting server")
return
}
}
func getUsers(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"users": users,
})
}
func addScores(c *gin.Context) {
var user User
err := c.BindJSON(&user) // リクエストのボディを構造体に変換
if err != nil {
fmt.Println("Error reading body")
c.JSON(http.StatusBadRequest, gin.H{ // エラーがあった場合はエラーメッセージを返す
"message": "Error reading body",
})
return
}
users = append(users, user) // ユーザーを追加
c.JSON(http.StatusOK, gin.H{
"message": "Add User",
})
}
サーバーを立ち上げる
server := gin.Default()
err := server.Run(":8080")
if err != nil {
fmt.Println("Error starting server")
return
}
この部分ではサーバーを立ち上げていて、:8080
でポートを指定しています。
このコードを実行すると、http://localhost:8080
で自動的に立ち上がります。
server.GET("/score", getUsers) // GetのAPIを登録
server.POST("/score", addScores) // PostのAPIを登録
この部分では、/score
というエンドポイントに対してGETとPOSTのAPIを登録しています。
GETのリクエストが来たら getUsers
関数が呼ばれ、POSTのリクエストが来たら addScores
関数が呼ばれます。
func getUsers(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"users": users,
})
}
なぞの gin.Context
というのは、リクエストやレスポンスに関する情報を持っている構造体です。
これを使って、リクエストに対してレスポンスを返していきます。
基本的な使い方はこれだけですが、詳しい中身を知りたい方はこちらを参照してください。
ここらへんはフレームワークの使い方なので暗記になりがちですね。
var user User
err := c.BindJSON(&user) // リクエストのボディを構造体に変換
この部分では、リクエストのボディを構造体に変換しています。
もしも何かしらのエラーがあった場合は、err
にエラーが入るので、それを使ってエラーハンドリングを行います。