golang

伸長するsliceの取扱い

Goで何かしら値を計算した結果をsliceに格納するときにcapを事前に設定出来ない場合もある。 // capがわかってない場合 var slice []T // cap(N)がわかっている場合 slice := make([]T, 0, n) append時にcapが足りない場合、slice内部の値をコピーして伸長す…

goroutineのテストを同期的に行う

とある関数の評価値 ― 例えばファイルに文字列を書き込む ― をテストしたい場合、 その評価がgoroutine内だと、テスト側から実行しても、タイミングによって取得できないことがあります。 そこで、テスト側から評価するときにはchanelを渡す用にして、そのch…

Golangでエレガントだと思うこと

@kana さんとハッカソンしていて、Golangのどこが好きか? と聞かれた時にうまく説明できなかったのでまとめておきます。 よく、Golangはgoroutineとchannelが取り上げられることが多いと思いますが、 それよりも、僕がGolangをGolangたらしめていると考えて…

JSONを扱うときにkeyとfieldを対応づける

Goの、encoding/json の Unmarshal で、例えばJSONデータのkeyが小文字の場合、自動でcapitalizeしてくれる。 pakcage main import( "encoding/json" ) type A struct { A_Id int Field string } func main() { jsonBlob := []byte(` {"a_id": 100, "field":…

effective-goではない何か

去年からGolangを書き散らかしてみて、だいぶセンス感じとれるようになってきたので、Golangを書くときのイディオムのようなものをまとめてみる。 Golangをコーディングするディレクトリ 簡単な、10行20行くらいで済むコードであればどこで書いてもいいのだ…