LoginSignup
28
16

More than 3 years have passed since last update.

Golang+Ginについての備忘録(ちょこっとGorm)

Last updated at Posted at 2019-04-17

はじめに

 こんにちは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について書くとか言っていましたが多分誰も読まないだろと思ったので備忘録にしました。この記事で間違ってることがありましたら本当にごめんなさい......

28
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
16