首页 文章

Go中的= =和=运算符之间的区别

提问于
浏览
199

在Go中, =:= 运算符之间有什么区别?他们似乎都是为了任务?这可能是显而易见的,但我似乎无法在文档中找到它 .

10 回答

  • 1

    只有 = 是赋值运算符 .

    := 实际上根本不是operator . 它是Short variable declarations子句语法的一部分 .

  • 154

    在Go中, := 用于声明分配,而 = 仅用于分配 .

    例如, var foo int = 10foo := 10 相同 .

  • 46

    正如其他人已经解释的那样, := 既适用于声明,转让,也适用于重新申报;它会自动猜测(推断)变量的类型 .

    这是一种简短的形式:

    var foo int
    foo = 32
    
    // OR:
    var foo int = 32
    
    // OR:
    var foo = 32
    

    一些规则

    你不能在 funcs 中使用 := . 这是因为,在任何函数中,语句都应该以关键字开头 .

    illegal := 42
    
    func foo() {
      legal := 42
    }
    

    你不能使用它们两次(在相同的范围内):

    legal := 42
    legal := 42 // <-- error
    

    因为 := 引入了 "a new variable" ,因此使用它两次不会重新声明第二个变量,因此它是非法的 .


    但是,如果其中一个变量是新的,则可以在 "multi-variable" 声明中使用它们两次:

    foo, bar  := someFunc()
    foo, jazz := someFunc()  // <-- jazz is new
    baz, foo  := someFunc()  // <-- baz is new
    

    这是合法的,因为,您没有声明所有变量,您只是将新值重新分配给现有变量,并同时声明新变量 .


    您可以使用简短声明在较新的范围内声明变量,即使该变量已在以下情况下使用相同的名称声明:

    var foo int = 34
    
    func some() {
      // because foo here is scoped to some func
      foo := 42  // <-- legal
      foo = 314  // <-- legal
    }
    

    这里, foo := 42 是合法的,因为它在 some() func的范围内声明 foo . foo = 314 是合法的,因为它只是为 foo 分配了一个新值 .


    您可以将它们用于多变量声明和赋值:

    foo, bar   := 42, 314
    jazz, bazz := 22, 7
    

    您可以在短语句块中声明相同的名称,例如: ifforswitch

    foo := 42
    if foo := someFunc(); foo == 314 {
      // foo is scoped to 314 here
      // ...
    }
    // foo is still 42 here
    

    因为 if foo := ... 中的 foo 只属于该 if 子句,并且它位于不同的范围内 .


    So, as a general rule: 如果要轻松声明变量,可以使用 := ,或者,如果要覆盖现有值,可以使用 = .


    References:

  • 203

    := 是宣言的简称 .

    a := 10
    b := "gopher"
    

    a 将声明为 int 并使用值 10 初始化,其中 b 将声明为字符串并使用值 gopher 初始化 .

    使用 = 的等价物将是

    var a = 10
    var b = "gopher"
    

    = 是赋值运算符 . 它的使用方法与在任何其他语言中使用它的方式相同 .

    声明变量并且存在初始值设定项时,可以省略类型(http://tour.golang.org/#11) .

  • 19

    := 声明和分配, = 只是分配

    当您不想用类型或结构声明填充代码时,它很有用 .

    // Usage with =
    var i int
    var U, V, W float64
    var k = 0
    var x, y float32 = -1, -2
    
    // Usage with :=
    i, j := 0, 10
    f := func() int { return 7 }
    ch := make(chan int)
    
  • 0

    :=表示 and 赋值,而=表示简单赋值 .

  • 2

    来自参考文献:(tour.golang.org

    Inside a function:= 短赋值语句可用于代替具有隐式类型的var声明 .

    Outside a function ,每个构造都以关键字(var,func等)开头,并且:=构造不可用 .

  • 9

    “:=”用于同时进行声明和启动,以下是一个例子 .

    使用“=”

    var i int

    我= 10

    https://play.golang.org/p/RU88ty_SGa

    使用“:=”

    我:= 10

    https://play.golang.org/p/XBdjBh-DQB

  • 6

    两者都是Go语言中变量声明的不同技术 .

    var firstName := "John" // is a variable declaration
    

    firstName := "John"   // is a short variable declaration.
    

    短变量声明是具有初始化表达式但没有类型的常规变量声明的简写 .

    请阅读以下详细信息:

    Variable declarations

    Short variable declarations

  • 10

    正如许多人已经说过的那样:=表示声明和分配; =表示简单分配 . 这里重要的一点是,如果你在功能上

    foo := 2.5
    

    然后Go决定 foo 是基于几个东西是float32还是float64,但是一旦决定并编译为float64,就不能使用 foo 作为float32,反之亦然 . 因此,有时最好使用完整语法 .

相关问题