#はじめに
こんにちはRIN1208です。
今回は最近GolangのフレームワークGinを使ったので備忘録を書こうと思いこの記事を書きました。
間違っている点がございましたらコメントにて教えていただけると幸いです。
#Ginとは
GitHub
Goのwebフレームワークです
#環境
golang 1.12.4
#基本的なコード
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/hoge/:number", rest) //rest api
r.GET("/path", path) //今回はクエリを受け取るところです。
r.DELETE("/:number", deletenumber)// deleteメゾット
r.POST("/post", post)//postメゾット
r.Run()//portを指定する場合はr.Run(":10000")みたいに書きます
}
#Rest APIの部分について
ここでは上記のRestの部分の説明
r := gin.Default()
r.GET("/hoge/:number", rest) //numberが変数名で/hoge/なんちゃらの時にrestが処理するようにします
//numberが変数
//省略...
func rest(c *gin.Context) {
key := c.Param("number")//ここではqueryではなくてParamを使います
fmt.Println(key)//もし/hoge/114だと114が出力されます
}
#Query
r.GET("/path", path)の部分については上記と同じです
//省略...
r.GET("/path", path)//クエリの型はstring型
//省略...
func path(c *gin.Context){
hoge := c.Query("hoge")//パスは/path?hoge=114
//hoge = "114"
hoge, _ := c.GetQueryArray("hoge")//クエリをarrayに入れます
//パスが/path?hoge=1&hoge=234の場合は
//hoge =[1,234]となります。ちなみにarrayなのでポインタではないです。
hoge := c.DefaultQuery("hoge", "514")
//この場合はデフォルトで514が設定されているため、パスが/pathでもhoge=514となります
//パスが/path?hoge=1の場合はhoge=1になります
}
#POST
postについてはpostでJsonを受け取ります。postに関してはcurl等で送ってください
参考ページ
//省略...
r.POST("/post", post)
//省略...
type Alice struct {
Id string `json:"id"`
Name string `json:"name"`
}
//curl -X POST -H "Content-Type: application/json" -d '{"ID":"1", "Name":"hoge"}' localhost:8080/post
//curlの例
func post (c *gin.Context){
var hoge Alice //alice型の変数の定義
c.BindJSON(&hoge)//hogeに受け取ったJsonを代入
}
#Delete
Deleteに関しては論理削除について書こうと思います。ORMはGORMを使用しました。
DBはMysqlを使用しました。どうやらGORMはDELETEで受け取ると自動で論理削除してくれるらしいです(多分自動.....)
//省略...
r.DELETE("/:number", deletenumber)
//省略...
type Alice struct {
gorm.Model
No string `json:"no"`
Name string `json:"name"`
}
func deletenumber (c *gin.Context){
key := c.Param("number")//rest apiの所と同じです
db, err := gorm.Open("sqlite3", "test.db")//それぞれの環境によって変わります
if err != nil {
panic("データベースへの接続に失敗しました")
}
defer db.Close()
// スキーマのマイグレーション
db.AutoMigrate(&Alice{})
db.Where("no = ?", key).Delete(&Alice{})//例えば/112の場合はNOが112のDBのデータを論理削除
}
ここで注意しなくてはいけないのがIDはGORMの方で使ってしまっているのでこちらの構造体の方でIDを設定してしまうとカラム名が重複してしまします(言い方が適切ではないかもしれないですがご了承ください....
#最後に
ここまで読んでくださり有難うございます。最近GinやGORMに触るようになったので覚えることが多くて基本的なことだけでも忘れないようにと思いこの記事を書きました。前回はcliについて書くとか言っていましたが多分誰も読まないだろと思ったので備忘録にしました。この記事で間違ってることがありましたら本当にごめんなさい......