gpt4 book ai didi

go - net.IP 作为 golang 中的映射键类型?

转载 作者:IT王子 更新时间:2023-10-29 01:27:03 30 4
gpt4 key购买 nike

我有一个映射,键是 net.IP,值是 channel 。但是我遇到了一个奇怪的编译时错误(无效的映射键类型)

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 作为映射键类型吗?

最佳答案

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

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
...
}

如果您希望 key 可打印,请使用 IP.Stringnet.ParseIP进行转换的函数:

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

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

关于go - net.IP 作为 golang 中的映射键类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50426955/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com