为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的 := 和 = 有什么区别?

Go 中的 := 和 = 有什么区别?

Go
九州编程 2022-01-04 10:19:49
我是 Go 编程语言的新手。我在 Go 中发现了一些奇怪的东西:我认为它在 Python 中使用:=和替代=,但是当我=在 Go 中使用它时,它也有效。:=和 和有什么不一样=?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

=是赋值。更多关于 Go 中的作业:作业


之间的微妙差异=,并:=当=在变量声明使用。


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


var name type = expression

上面的声明创建了一个特定类型的变量,为其附加了一个名称,并设置了它的初始值。thetype或 the= expression可以省略,但不能两者都省略。


例如:


var x int = 1

var a int

var b, c, d = 3.14, "stackoverflow", true

:=被称为short variable declaration采取形式


name := expression

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


注意::=是声明,而是=赋值


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


例如:


 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

此外,:=可能只出现在函数内部。在某些上下文中,例如“if”、“for”或“switch”语句的初始值设定项,它们可用于声明局部临时变量。


查看完整回答
反对 回复 2022-01-04
?
绝地无双

TA贡献1946条经验 获得超4个赞

= 只是分配


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


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


查看完整回答
反对 回复 2022-01-04
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

在函数内部,:=可以使用简短的赋值语句代替具有隐式类型的 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)

}

注意:声明的变量:=只能在功能块内部使用。


查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信