
bmf san @bmf_san
A web developer in Japan.
2020-09-15 00:31:41
github.com - CodeReviewCommentsを読んでメモしておきたいことをまとめる。
math/rand
を使ってはいけない。crypto/rand
のReader
を使う。// 長さ0のスライス
t := []string{}
よりも、
// nilのスライス
var t []string
のほうを使うようにする。
JSONオブジェクトのエンコード時、nil
はnull
に変換されるが、[]string{}
は[]
に変換される。
インターフェース設計では両者を区別しないほうがよい。分かりづらいミスを誘発する可能性があるため。
panic
を使うのは避け、error
型を含んだ複数の値を返すようにする。import _ "pkg"
ではパッケージをインポートした際の副作用を利用することができる。package foo_test
import (
"bar/testutil" // fooでもimportされている
. "foo" // foo_testをfooの一部のように見せる
)
メソッドのレシーバをポインタにするか、値にするかの基準。
迷う場合はポインタにしておく。
map
、func
、channel
ならポインタは避ける。slice
で、メソッドがslice
を作り直さない場合は、ポインタを避ける。time.Time
)、変更するフィールドやポインタがない構造体や配列、あるいはint
やstring
のような型の場合は、レシーバが値であるほうが良い場合もある。sync.Mutex
か、同期するようなフィールドを持つ構造体ならレシーバはポインタにする。テストが失敗したときに伝えるべきメッセージ。
# 参考
About the author
bmf san @bmf_san
A web developer in Japan.