在golang中什么是结构常量?为什么后面的是一个常量,尽管有一个变量?结构体不是常量吗?那么它是如何有意义的呢?
MyType{Field: var)
它有一个变量,但它是一个“字面量”?还有,为什么只有在第一次初始化它时才将其称为“struct literal”?
slwdgvem1#
编程语言使用"Literal"这个词来表示构造某种数据结构的语法方法,它意味着数据结构不是通过创建一个空的数据结构然后进行加减来构造的。比较:
MyType{Field: myVariable}
到
var x = new(MyType) x.Field = myVariable
好处是代码的外观在某种程度上反映了数据结构,坏处是你必须提前知道布局,并已经初始化了内容,这是不可能的,例如,你正在构造一个带有未知键的Map。下面是Go语言规范中的常量链接,注意它们都是定义数据结构的语法方式:
jvlzgdj92#
literal仅仅是指语法或组成源代码的方式,即按照其源代码的字面意义构造某种类型的值。int/string literal恰好构造了一个与源代码的字面意义相同的常量值。来自go规范复合字面值在每次求值时构造新的复合值。从他们的定义来看,构造复合类型的值是语法上的糖**,而不是**literal wiki page引用的固定值。引用自GOPL 4.4.1中的struct literal:结构类型的值可以使用为其字段指定值的结构文本来编写。
literal
int/string literal
struct literal
type Point struct{ X, Y int } p := Point{1, 2}
string literals和struct literals都是源代码,用于指导编译器在内存中构造值。struct literals在编译时可以是非常量,即仅在运行时已知。还有另一种类型的文字类型文字:还可以使用类型文本指定类型,类型文本从现有类型组成类型。这仅仅意味着类型系统源代码中的一个固定值。
string literals
struct literals
struct{} struct{ foo int32 }
2条答案
按热度按时间slwdgvem1#
编程语言使用"Literal"这个词来表示构造某种数据结构的语法方法,它意味着数据结构不是通过创建一个空的数据结构然后进行加减来构造的。
比较:
到
好处是代码的外观在某种程度上反映了数据结构,坏处是你必须提前知道布局,并已经初始化了内容,这是不可能的,例如,你正在构造一个带有未知键的Map。
下面是Go语言规范中的常量链接,注意它们都是定义数据结构的语法方式:
jvlzgdj92#
literal
仅仅是指语法或组成源代码的方式,即按照其源代码的字面意义构造某种类型的值。int/string literal
恰好构造了一个与源代码的字面意义相同的常量值。来自go规范
复合字面值在每次求值时构造新的复合值。
从他们的定义来看,构造复合类型的值是语法上的糖**,而不是**literal wiki page引用的固定值。
引用自GOPL 4.4.1中的
struct literal
:结构类型的值可以使用为其字段指定值的结构文本来编写。
string literals
和struct literals
都是源代码,用于指导编译器在内存中构造值。struct literals
在编译时可以是非常量,即仅在运行时已知。还有另一种类型的文字类型文字:
还可以使用类型文本指定类型,类型文本从现有类型组成类型。
这仅仅意味着类型系统源代码中的一个固定值。