Go没有数组常量。
我的应用程序接收包含几种类型的数字代码的消息,我需要将其显示为短语。
如果存在阵列含量,我可以执行以下操作:
func foo() {
...
fmt.Println(facename[f])
...
}
const facename [...]string = "top", "bottom", "left", "right", "front", "back"
但当然没有办法做到这一点。我想到的第一种方法是使用switch
func foo() {
...
name := "unknown"
switch f {
case 0:
name = "top"
case 1:
name = "bottom"
case 2:
name = "left"
case 3:
name = "right"
case 4:
name = "front"
case 5:
name = "back"
}
fmt.Println(name)
...
}
如果值的数量达到20或更多,则上述相当繁琐。
似乎最简洁的方式就像
func foo() {
...
fmt.Println(strings.Split(facenames,",")[f])
...
}
const facenames = "top,bottom,left,right,front,back"
我还必须检查索引是否在范围内。
虽然效率目前不是一个问题,但它让我感到困惑
我使用strings.Split()
比我想要的更多。
还有另一种方式是惯用还是既简洁又有效?
答案 0 :(得分:2)
惯用法是使用包级变量:
var facename = []string{"top", "bottom", "left", "right", "front", "back"}
func foo() {
// ...
fmt.Println(facename[f])
// ...
}
在这种情况下使用切片而不是数组也是惯用的。
答案 1 :(得分:0)
它可能不太适合,但它出现你的用例基本上是一个字符串等效的枚举。为此,我通常采取以下措施:
CustomPlayview