【Go Lang】WebFrameWork使ってみた3 iris


はじめに

Go lang WebFrameWorkを使ってみるの三つ目。
人気ライブラリの1~3位を使ってみることにする。

【Go Lang】WebFrameWork使ってみた1 Gin
【Go Lang】WebFrameWork使ってみた2 beego
【Go Lang】WebFrameWork使ってみた3 iris

  • Gin
  • beego
  • iris←今回はコレ

公式サイトとか

公式サイト(日本語ないです):https://www.iris-go.com/
github:https://github.com/kataras/iris
ライセンス:BSD 3-Clause

BSD 3-Clause

これは聞いたことないぞ?ググってみる。

1.ソースコードの再配布は、上記の著作権表示、ここに列挙された条件、および下記の免責条項を保持すること。
2.バイナリ形式の再配布は、上記の著作権表示、ここに列挙された条件、および下記の免責条項は、ドキュメントまたは他の資料で配布すること。
3.このソフトウェアのコントリビューター(貢献者)の名前は、特定の書面による事前の許可なしに、このソフトウェアから派生した製品の保証または販売促進のために使用してはいけない。

つまり、BSD-4-Clauseを使う場合は、
「この製品は、○○という組織によって開発されたソフトウェアが含まれています。」
という謝辞を入れなければなりません。

BSD-3-Clauseを使う場合は、
商用利用の際に「この製品が使っている○○というライブラリは○○さんが作ったものだよ、すごいでしょ」的な宣伝文句を書いてはいけないということです。

BSD-3-Clauseなので宣伝文句をいれなければ問題なさそう。

人気

qiitaのirisタグは別の言語のirisが混じっている。pythonにもあるみたい。
google検索結果はirisというワードが普遍的すぎる結果のような気がする。

学習しやすさ

日本語ドキュメントはやはりない。
beegoのようなquick startもない模様。
公式サイトのドキュメントは豊富。

特徴

  • MVCモデル
  • 最速のWebフレームワーク
  • クロスプラットフォーム

実装

GOMODULEでirisをインストールする。

$ mkdir iris-project && cd iris-project
$ go mod init iris-project
$ go get github.com/kataras/iris/v12@master

公式サイトのquick startからmain.goを作成。
Gin、beegoと同じくvueとアップロード処理を作成。
MVCとうたってたけどmain.goだけで完結してしまうな。
vueはbeegoで作成したやつをコピーしてきてインストール&ビルド。

main.go
package main

import (
    "io"
    "log"
    "net/http"
    "os"

    "github.com/kataras/iris/v12"
)

func main() {
    app := iris.Default()
    app.HandleDir("/static", iris.Dir("./static"))
    app.RegisterView(iris.HTML("./templates", ".tpl"))

    app.Get("/", func(ctx iris.Context) {
        ctx.ViewData("message", "Hello world!")
        ctx.View("index.tpl")
    })

    app.Post("/upload", func(ctx iris.Context) {
        file, header, err := ctx.FormFile("image")
        if err != nil {
            ctx.StopWithError(iris.StatusBadRequest, err)
            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)
        }

        ctx.StatusCode(http.StatusOK)
        ctx.JSON(iris.Map{
            "status": "ok",
        })
    })

    app.Listen(":8080")
}
templates/index.tpl
<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
  <meta charset="utf-8">
  <title>webpack_sample</title>
</head>
<body>
  <div id="message">{{.message}}</div>
  <div id="app"></div>
  <script src="./static/js/app.js"></script>
</body>
</html>

後はgo run で。

まとめ

公式サイトに従うとMVCっぽくなくできてしまった。
ドキュメントも量はあるけどあまり親切でないような・・・
ググっても情報が少ないしちょっとやりにくい。

3つのFWを試してみたけど、古い技術に慣れている人からするとbeegoが一番理解しやすいと思う。
createコマンドでとりあえずの形はできるしMVCのフォルダ分けが安心する。
次回からはbeegoについてもう少し踏み込んで試してみる予定。