Go语言 为什么结构文本是“文本”

clj7thdc  于 2023-02-01  发布在  Go
关注(0)|答案(2)|浏览(143)

在golang中什么是结构常量?
为什么后面的是一个常量,尽管有一个变量?结构体不是常量吗?那么它是如何有意义的呢?

MyType{Field: var)

它有一个变量,但它是一个“字面量”?
还有,为什么只有在第一次初始化它时才将其称为“struct literal”?

slwdgvem

slwdgvem1#

编程语言使用"Literal"这个词来表示构造某种数据结构的语法方法,它意味着数据结构不是通过创建一个空的数据结构然后进行加减来构造的。
比较:

MyType{Field: myVariable}

var x = new(MyType)
x.Field = myVariable

好处是代码的外观在某种程度上反映了数据结构,坏处是你必须提前知道布局,并已经初始化了内容,这是不可能的,例如,你正在构造一个带有未知键的Map。
下面是Go语言规范中的常量链接,注意它们都是定义数据结构的语法方式:

  • 词汇成分
  • 整数文字
  • 浮点文字
  • 虚文字
  • 符文文字
  • 字符串文字
  • 表达式
  • 复合文字
  • 函数文字
jvlzgdj9

jvlzgdj92#

literal仅仅是指语法或组成源代码的方式,即按照其源代码的字面意义构造某种类型的值。
int/string literal恰好构造了一个与源代码的字面意义相同的常量值。
来自go规范
复合字面值在每次求值时构造新的复合值。
从他们的定义来看,构造复合类型的值是
语法上的糖**,而不是**literal wiki page引用的固定值
引用自GOPL 4.4.1中的struct literal
结构类型的值可以使用为其字段指定值的结构文本来编写。

type Point struct{ X, Y int }
p := Point{1, 2}

string literalsstruct literals都是源代码,用于指导编译器在内存中构造值。struct literals在编译时可以是非常量,即仅在运行时已知。
还有另一种类型的文字类型文字:
还可以使用类型文本指定类型,类型文本从现有类型组成类型。
这仅仅意味着类型系统源代码中的一个固定值

struct{}
struct{ foo int32 }

相关问题