사용 • rand.Seed로 시드를 고정시켜볼 수 있었으나 • 1.20부턴 rand.New(rand.NewSource(...))로 반환된 rander를 써야함 • 결국 rander를 주입받아 쓰는게 속 편함 • rander를 그대로 쓰기보단 id generator, logging decider처럼 그 역할을 인터페이스로 빼서 주입하길 권장 랜덤 값을 사용할 땐
make([]byte, 16) for i := range b { b[i] = charset[rand.Intn(len(charset))] } return string(b) } func TestNewNonce(t *testing.T) { result := NewNonce() // Output: Imq61MBEGBVxXQ2l, eU1XBzYOqUFlTQeL assert.Len(t, result, 16) for _, r := range result { assert.Contains(t, charset, string(r)) } }
for _, k := range all { uniq[k] = true } keys := make([]string, 0) for k := range uniq { keys = append(keys, k) } sort.Strings(keys) // stable return keys }
모두 수신할 수 있는 채널 여러개를 select 할 땐 랜덤: e.g. quit 시그널 받았을 때 채널을 drain 해주기 • protojson, prototext의 특이사항. marshal된 값은 그때그때 다르다 `{“a”: “b”}`일 수도 `{“a”:“b”}`일 수도 그 외 flaky test 피하기