4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Go Lang】WebFrameWork使ってみた2 beego

Last updated at Posted at 2021-02-16

はじめに

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'なんだなあ・・・

人気

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/
にアクセスするとページが表示される。
うーん簡単。

WS000003 (2).JPG

これで完了!・・・ではなくて
これに対して前回のGinで作成したvueとファイルアップロードの処理を実装する。

まずrouterにuploadへのルーティングを追加。

routers/router.go
package routers

import (
	"beego-project/controllers"
	"github.com/astaxie/beego"
)

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/upload", &controllers.UploadController{})
}

追加したルーティングに対応するコントローラを追加。
imagesフォルダも追加。

controllers/upload.go
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の読み込みを追加。

views/index.tpl
<!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。

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?