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

声明一个常量数组

声明一个常量数组

Go
喵喵时光机 2021-04-26 18:54:59
我试过了:const ascii = "abcdefghijklmnopqrstuvwxyz"const letter_goodness []float32  = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }const letter_goodness  = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }第一个声明和初始化工作正常,但是第二,第三和第四个无效。如何声明和初始化浮点数的const数组?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

数组本质上不是一成不变的。您无法使其保持恒定。

您可以获得的最接近的是:

var letter_goodness = [...]float32 {.0817, .0149, .0278, .0425, .1270, .0223, .0202, .0609, .0697, .0015, .0077, .0402, .0241, .0675, .0751, .0193, .0009, .0599, .0633, .0906, .0276, .0098, .0236, .0015, .0197, .0007 }

请注意[...]而不是[]:它可确保您获得(固定大小)数组而不是切片。因此值不是固定的,但是大小是固定的。


查看完整回答
反对 回复 2021-05-17
?
梦里花落0921

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

从有效出发:


Go中的常量就是常量。即使在函数中定义为局部变量时,也可以在编译时创建它们,并且只能是数字,字符(符文),字符串或布尔值。由于编译时的限制,定义它们的表达式必须是可由编译器评估的常量表达式。例如,1<<3是一个常量表达式,而math.Sin(math.Pi/4)不是因为函数调用math.Sin需要在运行时发生。


切片和数组始终在运行时评估:


var TestSlice = []float32 {.03, .02}

var TestArray = [2]float32 {.03, .02}

var TestArray2 = [...]float32 {.03, .02}

[...]告诉编译器找出数组本身的长度。切片包装数组,在大多数情况下更易于使用。代替使用常量,只需使用小写的第一个字母使变量对其他包不可用:


var ThisIsPublic = [2]float32 {.03, .02}

var thisIsPrivate = [2]float32 {.03, .02}

thisIsPrivate仅在定义的包中可用。如果需要从外部进行读取访问,则可以编写一个简单的getter函数(请参阅golang中的Getters)。


查看完整回答
反对 回复 2021-05-17
?
慕容708150

TA贡献1831条经验 获得超4个赞

Go中没有数组常量之类的东西。


引用Go语言规范:常量:


有布尔常量,符文常量,整数常量,浮点常量,复数常量和字符串常量。符文,整数,浮点数和复数常量统称为数字常量。


甲常量表达式(这被用来初始化一个常数)可以仅含有恒定操作数和在编译时被评估。


该规范列出了不同类型的常量。请注意,您可以使用类型的常量表达式(以允许的类型之一作为基础类型)创建和初始化常量。例如,这是有效的:


func main() {

    type Myint int

    const i1 Myint = 1

    const i2 = Myint(2)

    fmt.Printf("%T %v\n", i1, i1)

    fmt.Printf("%T %v\n", i2, i2)

}

输出(在Go Playground上尝试):


main.Myint 1

main.Myint 2

如果需要数组,则只能是变量,而不能是常量。


我推荐这篇关于常量的很棒的博客文章:常量


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

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