我是Go编程语言的新手。
我在Go中发现了一些奇怪的东西:我认为它使用了:=
并在Python中替换了=
,但是当我在Go中使用=
时,它也有效。
:=
和=
之间的区别是什么?
答案 0 :(得分:3)
在函数内部,:=
短赋值语句可用于代替具有隐式类型的var声明。
例如:
package main
import "fmt"
func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
注意:用:=
声明的变量只能在功能块中使用。
答案 1 :(得分:2)
:=
是"简短声明表格"用于声明和初始化变量。它会对您分配的值进行类型推断,以设置变量的类型。
如果尝试使用短声明表单分配给同一范围内的同一变量,编译器将抛出错误。
留意简短的申报表"影子"封闭范围内的相同变量(特别是有错误)
=
在声明变量时明确需要var关键字,并且变量名称明确跟随变量名称。实际上你可以保留= off声明,因为Go有一个所有类型的初始值(字符串被初始化为"",int是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
答案 2 :(得分:2)
=
只是作业
:=
是功能块(非全局)中新变量(至少一个新var)的declare-and-initialize构造:
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
答案 3 :(得分:0)
我花了一些时间找出自己犯的一个错误,该错误可以帮助您弄清:=
和=
之间的区别。
考虑以下代码:
type mystruct struct {
a int
arr []int
}
func main() {
m := mystruct{}
m.arr := make([]int, 5) //compilation error because m.arr is already declared.
m.arr = make([]int, 5) //compiles
}
答案 4 :(得分:0)
= 用作静态类型。
:= 用作动态类型。
示例:
var a = 30 # statically typed and is a compile time check
b := 40 # dynamically checked.