为什么在 Go 中对类型使用“冗余”关键字“struct”?

Ole*_*yra 2 syntax struct go

我是 Golang 的忠实粉丝,对 Go 的语法设计非常满意。作为语法哲学的一部分,我们有一个规则如下:如果实际上不需要的话,省略一些东西(关键字、字符等)。

出于这个原因,而不是写多余的冒号:

for ; sum < 1000; {
    sum += sum
}
Run Code Online (Sandbox Code Playgroud)

你允许简单地说:

for sum < 1000 {
    sum += sum
}
Run Code Online (Sandbox Code Playgroud)

注意我们如何省略多余的分号

还有很多其他情况下,语法得到了极大的简化。

但是struct当我们定义类型时呢?

type Person struct {
    name string
}
Run Code Online (Sandbox Code Playgroud)

为什么我们需要把 struct关键字这里?关键字是确定意图,阐明可用选项的确切选择,以便编译器知道如何正确地完成他的工作。

如果我们简单地说:是否会不清楚和模棱两可:

type Person {
    name string
}
Run Code Online (Sandbox Code Playgroud)

??

我相信struct在上面的例子中有一个含义,因为在没有struct关键字的类型定义时编译器会失败。

请向我解释(并提供链接)我们还可以使用什么来代替struct定义某种类型时。

请列出我们想要向编译器澄清的可用选项,即类型名称后大括号中的内容完全是结构的一部分,而不是其他内容(还有什么?)。

谢谢。

Adr*_*ian 5

这不是多余的。您可以从现有类型创建类型:

type MyType int
type MyType string
Run Code Online (Sandbox Code Playgroud)

或接口:

type Stringer interface {
    String() string
}
Run Code Online (Sandbox Code Playgroud)

在 Go 导览规范中有介绍

  • 这是 Go 维护者的问题,而不是 StackOverflow 的问题。如果我不得不冒险猜测,我会说他们没有选择 `struct` 作为默认值,因为这将是一个任意选择 - 没有理由它比其他任何东西都更好,所以没有默认值。 (3认同)
  • OP 明确询问:“请解释一下(并提供链接)当我们定义某种类型时,我们还可以使用什么来代替结构。” (2认同)