为什么新的'和'制作'不保留关键字?

时间:2015-08-13 12:06:21

标签: go keyword identifier

启用语法突出显示后,在使用新用作变量名称的answer to this question之类的代码时,它会分散注意力。

我试图想出为什么只保留一部分关键字并且不能提出好的关键字的原因。

编辑:此问题的替代标题:

为什么Go的预先声明的标识符没有保留?

2 个答案:

答案 0 :(得分:4)

这是因为newmake不是真正的关键字,而是内置函数。

如果您检查full list of the reserved keywords,则不会看到lencap ......

答案 1 :(得分:2)

简而言之:因为在您自己的声明中使用predeclared identifiers不会使您的代码含糊不清

newmake是内置函数,以及许多其他功能。请参阅builtin包的文档中的完整列表。

Keywords是精心挑选的一小组保留字。您不能将关键字用作标识符,因为这可能会导致解释您的来源不明确

内置函数是特殊函数:您可以在不进行任何导入的情况下使用它们,它们可能具有不同的参数和返回列表。您可以使用内置函数的名称声明函数或变量,因为您的代码仍将保持明确:您的范围内的标识符将为" win"。

如果您使用关键字作为标识符,则无法访问您的实体,因为尝试通过其名称引用该关键字始终意味着关键字而不是您的标识符。< / p>

请参阅使用内置函数make的预先声明的标识符和内置类型int(不建议用于生产代码)的这个简单示例(在 Go Playground上尝试):

make := func() string {
    return "hijacked"
}

int := make()    // Completely OK, variable 'int' will be a string
fmt.Println(int) // Prints "hijacked"

如果你可以使用关键字作为标识符,即使解释声明也会给编译器带来麻烦:以下是什么意思?

  • func() - 它是否正在调用名为func的函数,或者它是一个函数 type ,没有参数且没有返回类型?
  • import() - 是分组导入声明(并且不导入任何内容)或调用名为import的函数吗?
  • ...