irisでiris CLIを使う
開発環境は、Windows 10 Pro(64bit) + go version go1.15.3 windows/amd64。
Go言語のマイクロWebフレームワークであるirisのCLIであるiris CLIを使い、ファイルを修正してもサーバーを切ることなく、変化を反映できるようにする。
1.以下のコマンドを続けて入力し、プロジェクトを新規作成し、必要なファイルを用意する
cd c:\ && mkdir test_iris_cli && cd test_iris_cli go mod init test_iris_cli go get github.com/kataras/iris/v12@master go get github.com/kataras/iris-cli
2.以下のコードをmain.goという名前で保存する
package main import "github.com/kataras/iris/v12" func main() { app := iris.New() booksAPI := app.Party("/books") { booksAPI.Use(iris.Compression) // GET: http://localhost:8080/books booksAPI.Get("/", list) // POST: http://localhost:8080/books booksAPI.Post("/", create) } app.Listen(":8080") } // Book example. type Book struct { Title string `json:"title"` } func list(ctx iris.Context) { books := []Book{ {"Mastering Concurrency in Go"}, {"Go Design Patterns"}, {"Black Hat Go"}, } ctx.JSON(books) // TIP: negotiate the response between server's prioritizes // and client's requirements, instead of ctx.JSON: // ctx.Negotiation().JSON().MsgPack().Protobuf() // ctx.Negotiate(books) } func create(ctx iris.Context) { var b Book err := ctx.ReadJSON(&b) // TIP: use ctx.ReadBody(&b) to bind // any type of incoming data instead. if err != nil { ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem(). Title("Book creation failure").DetailErr(err)) // TIP: use ctx.StopWithError(code, err) when only // plain text responses are expected on errors. return } println("Received Book: " + b.Title) ctx.StatusCode(iris.StatusCreated) }
3.以下のコマンドを入力する
iris-cli init
カレントディレクトリに、.iris.ymlという設定ファイルが作成されている。続けて、以下のコマンドを入力する。
iris-cli run
すると、iris-cli.exeと、main.goの実行ファイルが同時に起動する。
localhost:8080/booksにアクセスしてみてください。試しに、main.goの中のBook構造体の中のBlack Hat Goの文字列を、White Hat Goに変えて、保存してみてください。そうすると、iris-cli.exeの画面に、Change detectedという文字列が表示されて、その後に、再び、サーバーのリッスンが始まるメッセージ(Now Listening on:~)が現れてから、再度、localhost:8080/booksにアクセスすると、中身が変わっています。
これで、いちいち、修正して、サーバーを停止して、サーバーを再起動するということをすることなく開発に専念することができます。