键未检索到 Golang 映射值
Golang map value not retrieved by a key
需要确保我不会在这里发疯。
记录实例地图会按预期显示地图,但是从地图中检索值不起作用,如下所示。
serverStates 初始化为:
serverStates: make(map[string](string))
函数:
// Function to retrieve a server state by key
func (sv *ServerSupervisor) getState(key string) string {
sv.mutex.Lock()
defer sv.mutex.Unlock()
strings.TrimSpace(key)
log.Println("map size: ", len(sv.serverStates))
log.Println("map: ", sv.serverStates)
log.Println("map at " + key + ": ", sv.serverStates[key])
return sv.serverStates[key]
}
控制台输出:
2020/05/26 22:49:10 map size: 1
2020/05/26 22:49:10 map: map[2Rapxurg69iO:idle]
2020/05/26 22:49:10 map at 2Rapxurg69iO :
有人可以解释为什么 sv.serverStates[key]
是零吗?
我在辅助函数中的字节切片索引被证明是不正确的,并在键中添加了尾随空字符。
我按照 Marc 的建议使用了 fmt.printf("%q", key)
,结果显示 "9mfMcKhVRnzj\x00\x00\x00\x00"
strings.TrimSpace()
在这种情况下不起作用,我通过调整字节切片解决了这个问题。
需要确保我不会在这里发疯。 记录实例地图会按预期显示地图,但是从地图中检索值不起作用,如下所示。
serverStates 初始化为:
serverStates: make(map[string](string))
函数:
// Function to retrieve a server state by key
func (sv *ServerSupervisor) getState(key string) string {
sv.mutex.Lock()
defer sv.mutex.Unlock()
strings.TrimSpace(key)
log.Println("map size: ", len(sv.serverStates))
log.Println("map: ", sv.serverStates)
log.Println("map at " + key + ": ", sv.serverStates[key])
return sv.serverStates[key]
}
控制台输出:
2020/05/26 22:49:10 map size: 1
2020/05/26 22:49:10 map: map[2Rapxurg69iO:idle]
2020/05/26 22:49:10 map at 2Rapxurg69iO :
有人可以解释为什么 sv.serverStates[key]
是零吗?
我在辅助函数中的字节切片索引被证明是不正确的,并在键中添加了尾随空字符。
我按照 Marc 的建议使用了 fmt.printf("%q", key)
,结果显示 "9mfMcKhVRnzj\x00\x00\x00\x00"
strings.TrimSpace()
在这种情况下不起作用,我通过调整字节切片解决了这个问题。