相关疑难解决方法(0)

为什么在Go中有两种方式声明变量,有什么区别以及使用哪些?

根据Go参考,有两种声明变量的方法

Variable_declarations(格式为var count = 0var count int)

Short_variable_declarations(格式为count := 0)

我发现决定使用哪一个是非常令人困惑的.

我所知道的差异(到现在为止)是:

  • 我只能count := 0在函数范围内使用格式.
  • count := 0可以 在多变量简短声明中重新声明.

但就我所知,他们的行为确实相同.在参考文献中它还:

它(count:=0方式)是具有初始化表达式但没有类型的常规变量声明的简写

我的困惑是:

  • 如果一个只是另一个的简写方式,他们为什么表现不同?
  • Go的作者如何关注两种方式来声明一个变量(为什么它们没有合并为一种方式)?只是为了迷惑我们?
  • 在使用它们时,我是否还应该睁大眼睛,以防我掉进坑里?

variables var go

29
推荐指数
1
解决办法
1万
查看次数

为什么Go中的包级别不允许使用短变量声明?

这是允许的:

package main

var a = 3

...
Run Code Online (Sandbox Code Playgroud)

但这不是:

package main

a := 3

...
Run Code Online (Sandbox Code Playgroud)

为什么不?为什么函数外部的短变量声明不能在没有类型的情况下处理常规声明?只是为了简化解析?

go

20
推荐指数
2
解决办法
3271
查看次数

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

来自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,我必须承认在某些情况下被这个抛弃了.总的来说,我真的很享受围棋.

go

4
推荐指数
1
解决办法
584
查看次数

在Go中声明变量

Go文档表明应该使用速记:

x := "Hello World" 
Run Code Online (Sandbox Code Playgroud)

而不是长形式

var x string = "Hello World"
Run Code Online (Sandbox Code Playgroud)

提高可读性.虽然以下工作:

package main   
import "fmt"
var x string = "Hello World"
func main() {
    fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)

这不是:

package main
import "fmt"
x := "Hello World"
func main() {
    fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)

并给出错误"函数体外的非声明语句".相反,我在函数中声明它:

package main
import "fmt"
func main() {
   x := "Hello World"
   fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)

然后它工作得很好.看来我只能在使用变量的函数中使用简写.是这样的吗?谁能告诉我为什么?

go variable-declaration

2
推荐指数
1
解决办法
277
查看次数

标签 统计

go ×4

var ×1

variable-declaration ×1

variables ×1