net.IP作为golang中的map键类型?

时间:2018-05-19 15:43:49

标签: go

我使用key作为net.IP和value作为通道映射。 但我得到一个奇怪的编译时错误(无效的地图密钥类型)

17 type UdpServer struct {
18     ListenPort int
19
20     ConnRef *net.UDPConn
21     Log_ref *Logger
22     MapOfValues map[net.IP]chan string
23 }


$ go build c-manager.go
cmanager/c-udp_server.go:22:14: invalid map key type net.IP

$ go version
  go version go1.10.2 linux/amd64

我做错了什么?我们不能将net.IP作为地图密钥类型吗?

1 个答案:

答案 0 :(得分:4)

net.IP是切片类型。因为切片是可变的,所以它们不能用作映射键。使用字符串作为键类型:

MapOfValues map[string]chan string

使用type conversion将net.IP转换为字符串并返回。使用IP.To16将地址规范化为16字节表示。

x.MapOfValues[string(ip.To16())] = v

for k, v := range x.MapOfValues {
   ip := net.IP(k) // convert string to net.IP
   ...
}

如果您希望密钥可打印,请使用IP.Stringnet.ParseIP功能进行转换:

x.MapOfValues[ip.String()] = v

for k, v := range x.MapOfValues {
   ip := net.ParseIP(k) 
   ...
}