Go中的=和=之间有什么区别?

wha*_*ard 6 go colon-equals

我是Go编程语言的新手.

我在Go中发现了一些奇怪的东西:我认为它在Python中使用:=和替换=,但是当我=在Go中使用它时它也有效.

:=和之间有什么区别=?

sim*_*xia 20

=是作业.更多关于Go中的作业:作业

=和变量之间的微妙差异:=是=在变量声明中使用的.

Go中变量声明的一般形式是:

var name type = expression
Run Code Online (Sandbox Code Playgroud)

上面的声明创建一个特定类型的变量,为其附加一个名称,并设置其初始值.无论是type或= expression可以省略,但不能同时使用.

例如:

var x int = 1
var a int
var b, c, d = 3.14, "stackoverflow", true
Run Code Online (Sandbox Code Playgroud)

:=被称为short variable declaration形式

name := expression
Run Code Online (Sandbox Code Playgroud)

名称的类型由表达式的类型决定

请注意::=是一个声明,而是=一个赋值

因此,短变量声明必须至少声明一个新变量.这意味着一个简短的变量声明并不一定声明它左侧的所有变量,当它们中的一些已经在同一个词块中声明时,:=就像对这些变量的赋值一样

例如:

 r := foo()   // ok, declare a new variable r
 r, m := bar()   // ok, declare a new variable m and assign r a new value
 r, m := bar2()  //compile error: no new variables
Run Code Online (Sandbox Code Playgroud)

此外,:=可能只出现在功能内部.在某些上下文中,例如"if","for"或"switch"语句的初始化程序,它们可用于声明本地临时变量.

更多信息:

变量声明

短变量声明

  • 是的,这是一个新的.a {}是一个词块,不同的词块是不同的范围.但在实践中使用相同的名称通常不是一个好的风格.@whale_steward (2认同)

小智 7

= 只是分配

:= 是功能块(非全局)内新变量(至少一个新变量)的声明和初始化构造:

var u1 uint32      //declare a variable and init with 0
u1 = 32            //assign its value
var u2 uint32 = 32 //declare a variable and assign its value at once
//declare a new variable with defining data type:
u3 := uint32(32)        //inside the function block this is equal to: var u3 uint32 = 32
fmt.Println(u1, u2, u3) //32 32 32
//u3 := 20//err: no new variables on left side of :=
u3 = 20
fmt.Println(u1, u2, u3) //32 32 20
u3, str4 := 100, "str"        // at least one new var
fmt.Println(u1, u2, u3, str4) //32 32 100 str
Run Code Online (Sandbox Code Playgroud)


mat*_*t.s 6

:=是用于声明和初始化变量的“简短声明形式”。它对您分配的值进行类型推断以设置变量的类型。

如果尝试使用短声明形式分配给同一作用域中的同一变量,编译器将抛出错误。

留意在封闭范围内“隐藏”同一变量的简短声明形式(尤其是有错误的情况)

=声明变量时需要使用 var 关键字,并且变量类型显式地跟在变量名称后面。实际上,您可以在声明中保留 = ,因为 Go 对所有类型都有一个初始值(字符串初始化为“”,整数为 0,切片为空切片)。它也可以用于仅使用一个值进行重新分配,即

var s string = "a string" // declared and initialized to "a string"
s = "something else"      // value is reassigned

var n int // declared and initialized to 0
n = 3
Run Code Online (Sandbox Code Playgroud)