【发布时间】:2017-11-06 14:56:53
【问题描述】:
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() 的次数超出了我的预期。
是否有另一种方式既惯用又简洁高效?
【问题讨论】:
-
为什么不使用全局变量而不是常量?我的意思是,你没有得到“恒定”保护,但只要不导出变量,无论如何只有你自己的包可能会弄乱它。
标签: arrays go initialization idioms