缺少地图键的模板比较运算符

在尝试键入不存在键的映射时,我无法找到有关返回值类型的任何文档。从 Go 错误跟踪器来看,它似乎是一个特殊的“无价值”


我正在尝试使用该eq函数比较两个值,但如果键不存在,则会出现错误


例子:


var themap := map[string]string{}  

var MyStruct := struct{MyMap map[string]string}{themap}


{{if eq .MyMap.KeyThatDoesntExist "mystring"}}

  {{.}}

{{end}

结果是 error calling eq: invalid type for comparison


由此我假设 nil 值不是""像 Go 本身那样的空字符串。


有没有一种简单的方法来比较可能不存在的地图值和另一个值?


猛跑小猪
浏览 157回答 2
2回答

慕婉清6462132

使用索引函数:{{if eq (index .MyMap "KeyThatDoesntExist") "mystring"}}  {{.}}{{end}}index当键不在映射中时,该函数返回映射值类型的零值。问题中地图的零值是空字符串。

UYOU

可以先检查key是否在map中,如果有才进行比较。您可以检查另一个{{if}}操作或{{with}}设置管道的操作。使用{{with}}:{{with .MyMap.KeyThatDoesntExist}}{{if eq . "mystring"}}Match{{end}}{{end}}使用另一个{{if}}:{{if .MyMap.KeyThatDoesntExist}}    {{if eq .MyMap.KeyThatDoesntExist "mystring"}}Match{{end}}{{end}}请注意,您可以添加{{else}}分支以涵盖其他情况。全面覆盖{{with}}:{{with .MyMap.KeyThatDoesntExist}}    {{if eq . "mystring"}}        Match    {{else}}        No match    {{end}}{{else}}    Key not found{{end}}全面覆盖{{if}}:{{if .MyMap.KeyThatDoesntExist}}    {{if eq .MyMap.KeyThatDoesntExist "mystring"}}        Match    {{else}}        No match    {{end}}{{else}}    Key not found{{end}}请注意,在所有完整覆盖变体中,如果 key 存在但关联的 value 是"",则也将导致"Key not found".
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go