はじめに
Go lang WebFrameWorkを使ってみるの二つ目。
人気ライブラリの1~3位を使ってみることにする。
【Go Lang】WebFrameWork使ってみた1 Gin
【Go Lang】WebFrameWork使ってみた2 beego
【Go Lang】WebFrameWork使ってみた3 iris
- Gin
- beego←今回はコレ
- iris
公式サイトとか
公式サイト(日本語ないです):https://beego.me/
github:https://github.com/gin-gonic/gin
ライセンス:apache 2.0
bee'go'なんだなあ・・・
人気
- star数:25,835
- qiitaの記事数:28(https://qiita.com/tags/beego)
- google検索結果:約 305,000 件(検索ワード"go lang beego")
ginとだいぶ差を付けられてる感じ。
qiitaの記事少ないなあ。
学習しやすさ
日本語ドキュメントは・・・ない!
しかし公式のquick startは超シンプル。
$ go get github.com/beego/beego/v2@v2.0.0
package main
import "github.com/beego/beego/v2/server/web"
func main() {
web.Run()
}
これで動くらしい。
特徴
- MVCモデル
- 自動テスト機能
- RESTfulサポート
javaとか.netを触ってた人には理解が速そう。
実装
前回覚えたGOMODULEを使ってbeegoをインストールする。
$ mkdir beego&& cd beego
$ go mod init beego
$ go get -u github.com/beego/bee
$ go get -u github.com/astaxie/beego
bee new
createコマンドで新規プロジェクトを作成する。
$ bee new beego-project
bee new
$ cd beego-project
$ bee run
http://localhost:8080/
にアクセスするとページが表示される。
うーん簡単。
これで完了!・・・ではなくて
これに対して前回のGinで作成したvueとファイルアップロードの処理を実装する。
まずrouterにuploadへのルーティングを追加。
package routers
import (
"beego-project/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/upload", &controllers.UploadController{})
}
追加したルーティングに対応するコントローラを追加。
imagesフォルダも追加。
package controllers
import (
"io"
"log"
"net/http"
"os"
"github.com/astaxie/beego"
)
type UploadController struct {
beego.Controller
}
func (c *UploadController) Post() {
file, header, err := c.GetFile("image")
if err != nil {
c.Ctx.Output.SetStatus(http.StatusBadRequest)
return
}
fileName := header.Filename
dir, _ := os.Getwd()
out, err := os.Create(dir + "\\images\\" + fileName)
if err != nil {
log.Fatal(err)
}
defer out.Close()
_, err = io.Copy(out, file)
if err != nil {
log.Fatal(err)
}
c.Data["json"] = `{
"status": "ok",
}`
c.Ctx.Output.SetStatus(http.StatusOK)
c.ServeJSON()
}
vueはginで作成したコンポーネント、パッケージをコピーしてきてインストール&ビルド。
※ビルド後フォルダはstaticに変更する必要あり
$ npm instrall
$ npm run dev
最後にテンプレートファイルにappのIDとvueのJSの読み込みを追加。
<!DOCTYPE html>
<html>
<head>
<title>Beego</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- icon 省略 -->
<style type="text/css">
<!-- css 省略 -->
</style>
</head>
<body>
<header>
<h1 class="logo">Welcome to Beego</h1>
<div class="description">
Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra.
</div>
</header>
<div id="app"></div>
<footer>
<div class="author">
Official website:
<a href="http://{{.Website}}">{{.Website}}</a> /
Contact me:
<a class="email" href="mailto:{{.Email}}">{{.Email}}</a>
</div>
</footer>
<div class="backdrop"></div>
<script src="/static/js/app.js"></script>
<script src="/static/js/reload.min.js"></script>
</body>
</html>
後はbee run。
まとめ
GET、POSTを簡単に実装できた。
vueもGinで用意したものがあったので実装時間は5分くらい?
Ginであった疑問
実際の開発でもmain.goで全てのルーティングをやるのだろうか?
今までのjavaとかの感覚だとページごとにファイルが分かれててほしくなるが。
はMVCであるbeegoでは問題解決していると感じた。
共通的な処理はrouterに書けばいいのかな?
個人的にはGinより理解はしやすかった。
だけどちょっとした疑問をググった時に日本語情報が少ない。ちょっとこれは辛い。
次はiris。