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

在 golang 中切换基于 enum/iota 的类型

在 golang 中切换基于 enum/iota 的类型

Go
弑天下 2021-10-18 14:34:36
我定义了一个枚举和结构类型,如下所示:type NodeType intconst (        City NodeType = iota        Town        Village)type AreaNode struct {        Location Coord2D        Type NodeType}现在我正在迭代一系列节点,每个节点都有一个类型if node, ok := area.Nodes[coord]; ok {    switch node.Type {        case node.Type == City:            // do something for City        case node.Type == Town:            // do something for Town        case node.Type == Outpost:            // do something for Outpost    }}但是我收到一个错误:二进制表达式中的类型不兼容。我该如何解决这个问题?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您要么执行switch没有值的 a ,并将比较表达式放在 each 中case,要么将每种情况视为==已检查值的 a 。例如:


if node, ok := area.Nodes[coord]; ok {

    switch node.Type {

        case  City:

            // do something for City

        case Town:

            // do something for Town

        case Outpost:

            // do something for Outpost

    }

}

switch当您在不基于单个值的条件之间切换时,将使用另一种语法。例如


switch {

    case node.Type == City:

        // do something for City

    case node.OtherParam == "foo":

        ///

}

这意味着基本上你是在二进制条件之间切换。就个人而言,我使用它只是为了从不依赖单个值的长 if/else 块中消除混乱,但我很少使用它。


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

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