cat posts/go-%e3%82%92%e5%b0%91%e3%81%97%e6%9b%b8%e3%81%84%e3%81%a6%e3%81%bf%e3%81%9f.md

Go を少し書いてみた

バイナリ一つで動くものを作りたくて 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 は他の言語の並行処理と概念が違うので、別途時間を取って理解しました。まだ完全には把握できていません。少しずつ書いていくつもりです。