無効なメモリアドレスのランタイムエラーが発生しました。予期しない無効なメモリアドレスまたはnilポインタ逆参照
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x4e0f24]
goroutine 1192592 [running]:
panic(0x793540, 0xc420010040)
#011/usr/local/go/src/runtime/panic.go:500 +0x1a1
foobar/sd.(*Channel).Attributes(0x0, 0xc420110101, 0xc42278f9b0, 0x9)
#011/home/app/go/src/foobar/sd/channel.go:36 +0x54
channel.goは次のようになります。
35 func (m *Channel) Attributes() (*ChannelAttrs, error) {
36 redisHash := "sd:channels:" + m.hash
37
38 rc := m.ctx.RedisPool.Get()
39 values, err := redis.Values(rc.Do("HGETALL", redisHash))
40 rc.Close()
41 if err != nil {
42 return nil, err
43 }
44 attrs := ChannelAttrs{}
45 redis.ScanStruct(values, &attrs)
46 return &attrs, nil
47 }
どのようにそれはライン36がこれを引き起こしている可能性がありますか?どういうわけかm
がnilになる可能性はありますか?もしそうなら、どうですか?
注:ハッシュこれはAttributes
はnil
として受信m
で呼び出されていることを意味する文字列
はこれを呼び出すコードで 'M' 'nil'ですか? – abligh
私は分かりませんが、これは生産コードではめったに起こりません。私はそれを複製する方法を見つけていない。 mが外出していてもそれは可能ですか? –
あなたはお見逃しでしたm [更新](https://play.golang.org/p/j9T0dQ8-oH) – patilnitin