乐闻世界logo
搜索文章和话题

Golang 中的 = 和 := 运算符有什么区别?

7 个月前提问
3 个月前修改
浏览次数105

6个答案

1
2
3
4
5
6

在 Go 语言中,=:= 是两种不同的运算符,它们用于变量的赋值,但各自的用途和上下文有所不同。

  • = 是赋值运算符,它用于给已经声明的变量赋予新的值。在使用 = 之前,必须已经有一个变量的声明存在。例如:
go
var x int x = 1 // 将值 1 赋给已声明的变量 x

在这个例子中,x 首先被声明为 int 类型,然后我们用 = 将值 1 赋给 x

  • := 是短变量声明运算符,它用于同时声明和初始化变量。如果在函数内部,你想声明一个新的局部变量并且立即给它赋值,你可以使用 := 这样做。这样,就不需要显式地声明变量类型,因为 Go 会自动根据右侧表达式的类型来推断变量的类型。例如:
go
x := 1 // 同时声明变量 x 并赋值为 1

在此例子中,我们没有显式地声明 xint 类型;Go 自动推断出 x 的类型为 int,因为我们将一个整数 1 赋给了 x

需要注意的是,:= 仅能用于函数内部,而 = 可以用于任何地方对变量进行赋值。此外,:= 不能用于已经声明过的变量,否则会引发编译错误。但是,如果在相同的作用域中,存在多个新的变量,并且只有其中一个是新的,则可以使用 :=,例如:

go
var a int a, b := 1, 2 // 这里 a 是之前声明的变量,而 b 是新声明的变量

在这个例子中,a 已经事先声明过了,而 b 是新声明的变量,所以可以使用 := 运算符。

总结来说,= 是用于给已经存在的变量赋值的,而 := 是用于声明新变量的同时给它赋值。

2024年6月29日 12:07 回复

在Go中,:=是用于声明+赋值,而=是仅用于赋值。

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

2024年6月29日 12:07 回复

总而言之:

  • 声明一个变量,使用: :=
  • 更改变量的值,使用:=

有一些规则,但 TLDR 并不总是正确的。

正如其他人已经解释的那样,:=既用于声明、赋值,也用于重新声明;它会自动猜测(推断)变量的类型。

例如,foo := 32是以下形式的简写形式:

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

/规则如下:/

★ 第一条规则:

您不能:=在 之外使用funcs。这是因为,在 func 之外,语句应该以关键字开头。

shell
// no keywords below, illegal. illegal := 42 // `var` keyword makes this statement legal. var legal = 42 func foo() { alsoLegal := 42 // reason: it's in a func scope. }

★ 第二条规则:

您不能使用它们两次(在同一范围内):

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

因为,:=引入了**“一个新变量”**,因此使用它两次不会重新声明第二个变量,所以它是非法的。


★ 第三条规则:

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

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

★ 第四条规则(重新声明):

如果其中一个变量是新的,您可以在**“多变量”**声明中使用它们两次:

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

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


★ 第五条规则:

您可以使用短声明在较新的作用域中声明变量,即使该变量之前已经使用相同的名称声明过:

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

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


★ 第 6 条规则:

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

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

因为,fooin if foo := ...,仅属于该if子句,并且位于不同的范围内。


参考:

2024年6月29日 12:07 回复

唯一的=就是_赋值运算符_。

:=是短变量声明子句语法的一部分。
👉 不过有一些规则。有关更多详细信息,请参阅其他答案

2024年6月29日 12:07 回复

:=是声明的简写。

shell
a := 10 b := "gopher"

a将被声明为 anint并用 value 进行初始化,10其中 asb将被声明为字符串并用 value 进行初始化gopher

他们的等价物=

shell
var a = 10 var b = "gopher"

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

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

2024年6月29日 12:07 回复

:= 表示声明赋值,而 = 表示简单赋值。

2024年6月29日 12:07 回复

你的答案