猿问

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

我定义了一个枚举和结构类型,如下所示:


type NodeType int

const (

        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

    }

}

但是我收到一个错误:二进制表达式中的类型不兼容。


我该如何解决这个问题?


弑天下
浏览 194回答 1
1回答

慕丝7291255

您要么执行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 块中消除混乱,但我很少使用它。
随时随地看视频慕课网APP

相关分类

Go
我要回答