概要
Go で簡単な Web アプリを作成してみました
本当に簡単なアプリでビルトインのライブラリだけで動作します
事前に Go のインストールと $GOPATH の設定は行っておいてください
環境
- CentOS 6.6
- Go 1.6
Web アプリの作成
特に Github に公開する予定はないですが、Go のルールに従ってコーディングしていきます
- touch $GOPATH/src/github.com/hawksnowlog/hello/main.go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%s %s!", Hello(), r.URL.Path[1:])
}
func Hello() string {
return "Hi there, I love"
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
8080 ポートでサーバを起動してアクセスしたパスと文字列を表示するサンプルです
net/http がビルトインのライブラリなのでコピペするだけで動作します
ビルド
コードをビルドして実行可能なバイナリファイルを作成します
- go install github.com/hawksnowlog/hello
で $GOPATH/bin/hello
が作成されます
go build
でもビルドしてバイナリを作成することができますが Go のルールに従ったパスでコードを管理しているので go install
のほうがいいです
go build
の場合、コマンドを実行したカレントにバイナリを作成します
動作確認
ではバイナリを実行します
- $GOPATH/bin/hello
でエラーが発生せずプレグラウンドで動作し始めます
確認は curl http://localhost:8080/hoge
とかにアクセスすると「Hi there, I love hoge!」と表示されます
テスト
ついでにテストも作成してみました
- touch $GOPATH/src/github.com/hawksnowlog/hello/main_test.go
package main
import (
"testing"
)
func TestHello(t *testing.T) {
actual := Hello()
expected := "Hi there, I love"
if actual != expected {
t.Errorf("got %v\nwant %v", actual, expected)
}
}
テストファイルにも命名規則があるみたいで xxx_test.go というファイル名がいいみたいです
これで
- go test github.com/hawksnowlog/hello
で実行することができます
直接ファイルを指定して実行してしまうと
# command-line-arguments
src/github.com/hawksnowlog/hello/main_test.go:8: undefined: Hello
FAIL command-line-arguments [build failed]
というエラーになってしまうのでご注意ください
最後に
超簡単な web アプリを作成してみました
テストも書きましたが実際にリクエストするようなエンドツーエンドではないのはすいません
テンプレートなどの機能も初めからあるみたいです
とはいえたぶんちゃんと書こうとしたら revel とか gin とかを使うんだと思います
Tips
- go build でバイナリが作成されない
package main
でない場合はバイナリが作成されないみたいです
When the command line specifies a single main package,
build writes the resulting executable to output.
Otherwise build compiles the packages but discards the results,
serving only as a check that the packages can be built.
0 件のコメント:
コメントを投稿