Collections
map: 存在しないキーも値だけを読むとゼロ値になる
mapの読み取りは未登録でも要素型のゼロ値を返すため、値だけでは存在を判定できません。
Sourcelookup.go
Go 1.22
package mapexample
func Lookup(scores map[string]int, name string) (int, bool) {
score, ok := scores[name]
return score, ok
}Testlookup_test.go
Go 1.22
package mapexample
import "testing"
func Test存在しないmapキーも値だけを読むとゼロ値になる(t *testing.T) {
scores := map[string]int{"zero": 0}
missingScore, missingOK := Lookup(scores, "missing")
zeroScore, zeroOK := Lookup(scores, "zero")
if missingScore != 0 || missingOK || zeroScore != 0 || !zeroOK {
t.Fatalf("missing = (%d, %t), zero = (%d, %t)", missingScore, missingOK, zeroScore, zeroOK)
}
}01Assertion
このテストで確認できること
- 未登録のintキーを読むと0になる
- comma okで未登録と0が登録済みのケースを区別できる
0、false、空文字が業務上あり得るmapでは、必ず2値目のokを受け取ります。値のゼロ判定だけを欠損判定にしません。
OBSERVED RESULT
missing: score=0, ok=false
zero: score=0, ok=true