Sarcasistブログ

Sarcasistのメンバーが技術ネタ、運営ネタ、サービスに関するを記事を投稿するブログ

beegoで簡単なJSONを返すまで

お疲れ様です。honyanyaです。

けっこう前にGoのWEBアプリケーションフレームワークである「beego」を簡単に触りました。
前触ったのがGoが1.8.x系でしたので、再度新しいバージョンで触ってみましたのでブログに残そうと思います。

今回のバージョン

$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

な環境に

$ go version
go version go1.11.1 linux/amd64

バージョンは1.11.1と新しいバージョンでやってみます。

beego のインストール

beego を使うためにbeegoとCLIツールであるbeeをインストールします。
go get でサクッと入れました。

$ go get -u github.com/astaxie/beego

$ go get -u github.com/beego/bee
$ bee version
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v1.10.0

├── Beego     : 1.10.1
├── GoVersion : go1.11.1
├── GOOS      : linux
├── GOARCH    : amd64
├── NumCPU    : 1
├── GOPATH    : /home/vagrant/go
├── GOROOT    : /home/vagrant/.goenv/versions/1.11.1
├── Compiler  : gc
└── Date      : Wednesday, 31 Oct 2018

プロジェクト作成

bee new [app-name]でプロジェクトを作成できます。

$ bee new bee-vertification-001
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v1.10.0
2018/10/31 22:06:12 WARN     ▶ 0001 You current workdir is not inside $GOPATH/src.
2018/10/31 22:06:12 INFO     ▶ 0002 Creating application...
    create   /home/vagrant/go/src/bee-vertification-001/
    create   /home/vagrant/go/src/bee-vertification-001/conf/
    create   /home/vagrant/go/src/bee-vertification-001/controllers/
    create   /home/vagrant/go/src/bee-vertification-001/models/
    create   /home/vagrant/go/src/bee-vertification-001/routers/
    create   /home/vagrant/go/src/bee-vertification-001/tests/
    create   /home/vagrant/go/src/bee-vertification-001/static/
    create   /home/vagrant/go/src/bee-vertification-001/static/js/
    create   /home/vagrant/go/src/bee-vertification-001/static/css/
    create   /home/vagrant/go/src/bee-vertification-001/static/img/
    create   /home/vagrant/go/src/bee-vertification-001/views/
    create   /home/vagrant/go/src/bee-vertification-001/conf/app.conf
    create   /home/vagrant/go/src/bee-vertification-001/controllers/default.go
    create   /home/vagrant/go/src/bee-vertification-001/views/index.tpl
    create   /home/vagrant/go/src/bee-vertification-001/routers/router.go
    create   /home/vagrant/go/src/bee-vertification-001/tests/default_test.go
    create   /home/vagrant/go/src/bee-vertification-001/main.go
2018/10/31 22:06:12 SUCCESS  ▶ 0003 New application successfully created!

beego の構成

$ cd go/src/bee-vertification-001/
$ tree .
.
├── conf
│   └── app.conf
├── controllers
│   └── default.go
├── main.go
├── models
├── routers
│   └── router.go
├── static
│   ├── css
│   ├── img
│   └── js
│       └── reload.min.js
├── tests
│   └── default_test.go
└── views
    └── index.tpl

コントローラーに専用の処理を追加する

./controllers/default.go

type ProductJson struct {
        ID int `json:"id"`
        NAME string `json:"name"`
}

type ProductController struct {
        beego.Controller
}

func (c *ProductController) Get() {
        var productJson = ProductJson{
                ID: 1,
                NAME: "商品HOGE",
        }
        c.Data["json"] = &productJson
        c.ServeJSON()
}

ベースはBeegoのドキュメントを参照
https://beego.me/docs/mvc/controller/jsonxml.md

key名にはご注意ください
https://stackoverflow.com/questions/34127023/json-response-in-beego-controller

次にルーティングの設定を行う

./routers/router.go

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/product", &controllers.ProductController{}) // 追加
}

これで、 /product にアクセスした際に、 ProductController が呼ばれます

実行確認

$ bee run

でWEBアプリケーションを起動します。

$ curl http://localhost:8080/product | jq

{
  "id": 1,
  "name": "商品HOGE"
}

とこんな感じで JSON を返すことが確認できました。

次のアクション

controllerとroutingのみしか触れていません。
なのでモデル部分も触りたいなと思います。
ゆくゆくはDDDみたいな事もしたいなとも考えたりもしてます。