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

时间:2016-04-09 04:58:16

标签: go colon-equals

我是Go编程语言的新手。

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

:==之间的区别是什么?

5 个答案:

答案 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.