sim*_*xia 20
=和变量之间的微妙差异:=是=在变量声明中使用的.
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"语句的初始化程序,它们可用于声明本地临时变量.
更多信息:
小智 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)
:=是用于声明和初始化变量的“简短声明形式”。它对您分配的值进行类型推断以设置变量的类型。
如果尝试使用短声明形式分配给同一作用域中的同一变量,编译器将抛出错误。
留意在封闭范围内“隐藏”同一变量的简短声明形式(尤其是有错误的情况)
=声明变量时需要使用 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)
| 归档时间: |
|
| 查看次数: |
4874 次 |
| 最近记录: |