我定义了一个枚举和结构类型,如下所示:
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
}
}
但是我收到一个错误:二进制表达式中的类型不兼容。
我该如何解决这个问题?
答案 0 :(得分:6)
您要么switch
没有值,要在每个case
中放置比较表达式,或者将每个案例视为==
以查看已检查的值。 e.g:
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
语法。 e.g。
switch {
case node.Type == City:
// do something for City
case node.OtherParam == "foo":
///
}
这意味着你基本上是在二元条件之间切换。就个人而言,我只是用它来消除不依赖单个值的长if / else块的混乱,但我很少使用它。