バイナリ一つで動くものを作りたくて Go を触りました。
Python や Node.js のアプリをデプロイするには、ランタイムや依存パッケージをサーバーに入れる必要があります。Go は go build でシングルバイナリになります。「コピーして実行するだけ」は思ったより快適です。
書いてみての印象
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "hello")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
標準ライブラリが充実していて、簡単な HTTP サーバーなら外部パッケージなしで書けます。型は静的で、コンパイラが厳しい分、実行時エラーが減る感覚があります。
慣れるまで戸惑った点
エラーを戻り値で返すのが最初は面倒に感じました。if err != nil が頻出します。慣れると「このエラーをここで処理している」が明示的に分かって悪くないと思えてきます。
goroutine と channel は他の言語の並行処理と概念が違うので、別途時間を取って理解しました。まだ完全には把握できていません。少しずつ書いていくつもりです。