Go
golang
gin

Go言語のWebフレームワークgin用ツールgin-scaffoldの使い方

More than 1 year has passed since last update.

はじめに

Go言語のWebフレームワークgin
しかし、繰り返しのコードをいちいちめんどくさいことを書きたくないと思います。

https://github.com/dcu/gin-scaffold/

ドキュメントは英語、日本語、韓国語、中国語(簡体字)、ベトナム語があります。(2017/08現在)

日本語ドキュメント

https://github.com/dcu/gin-scaffold/blob/development/README.ja.md

プロジェクト生成

gin-scaffold init hoge

各操作をするときはプロジェクト内で行うのでフォルダ内に入っておきましょう。

cd hoge 

DBの用意(MongoDB)

インストール

Qiitaの記事のこちらがいいのでそこを参考に。(Mac)

MongoDBのインストール

起動

sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log

一旦起動

hogeプロジェクトなので起動ファイルもhoge.goになってます。

go run hoge.go

http://localhost:4000にアクセスすれば見られます。

hoge.go
func getPort() string {
        port := os.Getenv("PORT")
        if port == "" {
                port = "4000" // ここを変更
        }

        return port
}

表示

Screen Shot 2017-08-13 at 10.12.14 PM.png

Nothing to see here.が見えたら成功。

スキャフォルディング

足場が作れます。(プロジェクトの中(今回はhogeフォルダ)で行うこと)

gin-scaffold scaffold モデル名 フィールド名:型名

gin-scaffold scaffold User name:int

UserUは大文字ですが、小文字でもいいようになってます。

各アクセス

[GIN-debug] POST   /users                    --> hoge/controllers.(*UsersController).(hoge/controllers.createUser)-fm (3 handlers)
[GIN-debug] GET    /users                    --> hoge/controllers.(*UsersController).(hoge/controllers.listUsers)-fm (3 handlers)
[GIN-debug] GET    /users/:user_id           --> hoge/controllers.(*UsersController).(hoge/controllers.getUser)-fm (3 handlers)
[GIN-debug] PUT    /users/:user_id           --> hoge/controllers.(*UsersController).(hoge/controllers.updateUser)-fm (3 handlers)
[GIN-debug] DELETE /users/:user_id           --> hoge/controllers.(*UsersController).(hoge/controllers.deleteUser)-fm (3 handlers)
[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :4000

とログが出るので直ぐにわかると思いますが、

なんどもscafoldのコマンドをするとうまく起動できず以下のエラーが出ると思います。

controllers/router.go:11: no new variables on left side of :=

controllers/router.goのSetupメソッドに同じコードが存在するときなので削除します。

controllers/router.go
// Setup sets up all controllers.
func Setup(router *gin.Engine) {
        users := UsersController{Router: router}
        users.Setup()
        users := UsersController{Router: router} # ここ消す
        users.Setup() # ここ消す
}

// vi:syntax=go

GET(User一覧の取得)

http://localhost:4000/users
へアクセスする。

POST

テンプレートがないのでcurlコマンドで行うのがいいです。

curl -w '\n' 'http://localhost:4000/users' --data 'name=1234' -XPOST

DELETE

curl -XDELETE 'http://localhost:4000/users/59b53b3ea75b064cedce7773'

idを指定します。ここでは、59b53b3ea75b064cedce7773がid。

PUT

curl -XPUT 'http://localhost:4000/users/59b53b35a75b064cedce7772' -d 'name=天才'

これで指定。

×これはダメ。JSONも対応したいかな。

curl -XPUT 'http://localhost:4000/users/59b53b35a75b064cedce7772' -d '{
    "name" : "trying out Elasticsearch"
}'

更新したいもののidを指定。

※PUTはPOSTと違い、リソース名を指定して作成または更新をかけるメソッドです。

id:1のUser取得

http://localhost:4000/users/1
へアクセスする。

その他各操作

モデル

gin-scaffold model モデル名 フィールド名:フィールドの型

コントローラ生成

gin-scaffold controller コントローラ名

注意点

まだintとstring以外で生成すると怪しい。
私もCollaboratorなので修正する見込み。
対応しました。