函数外的变量声明快捷方式

use*_*949 4 go

来自Java和C#的背景我很高兴Golang能够使用快捷方法对函数内的私有变量进行变量声明,这使我能够编写:

x := 1.5
Run Code Online (Sandbox Code Playgroud)

它让我想起了用Python等动态语言打字的鸭子.但是,在声明函数范围之外的全局变量时,您仍然需要使用更详细的语法:

var x float64 = 1.5
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么快捷方法适用于私有变量而不是全局变量?我知道这种语言的设计者非常有经验,所以我认为这并不能反映出被忽视的特征.是否存在技术上的原因,为什么这种类型推断(我意识到:=快捷方式与正确的类型推断不同)在全局范围内不起作用?它在设计方面似乎有些不一致,作为一个没有经验的Gopher,我必须承认在某些情况下被这个抛弃了.总的来说,我真的很享受围棋.

div*_*van 5

请参阅此主题中的Ian答案:https://groups.google.com/forum/#! msg/golang -nuts / qTZemuGDV6o/IyCwXPJsUFIJ

在顶层,每个声明都以关键字开头.这简化了解析.

  • 和[本主题](https://groups.google.com/forum/#!msg/golang-nuts/OqYL9lgsPQ4/udp0nPHPZTgJ)获取一些其他信息:在顶层,var(或const或type或func)是必要的:每个项目必须由关键字引入,以解决与识别语句边界相关的ur-syntactic原因.由于后来的更改涉及分号,我相信在某些情况下可以消除对var的需要,但由于const,type和func必须保留,因此它不是一个引人注目的论点. (4认同)