为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
猛跑小猪 2021-12-13 10:46:47
在尝试键入不存在键的映射时,我无法找到有关返回值类型的任何文档。从 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 本身那样的空字符串。有没有一种简单的方法来比较可能不存在的地图值和另一个值?
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

使用索引函数:


{{if eq (index .MyMap "KeyThatDoesntExist") "mystring"}}

  {{.}}

{{end}}

index当键不在映射中时,该函数返回映射值类型的零值。问题中地图的零值是空字符串。


查看完整回答
反对 回复 2021-12-13
?
UYOU

TA贡献1878条经验 获得超4个赞

可以先检查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".


查看完整回答
反对 回复 2021-12-13
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信