Syntax 如何区分从具有多个返回的函数中赋值和声明值?
从函数中检索多个返回时,我发现您可以使用Syntax 如何区分从具有多个返回的函数中赋值和声明值?,syntax,go,Syntax,Go,从函数中检索多个返回时,我发现您可以使用:=动态声明值的变量,或者只需使用=将值分配给现有变量。当我想将一个返回值分配给一个已经存在的变量,同时为另一个变量声明一个新变量时,就会出现问题 我目前只通过预先分配值和声明所需的变量(bar,在本例中)解决了这个问题,如下面的代码片段: package main import ( "fmt" ) func getFooAndBar() (foo string, bar string) { return "Foo", "Bar" }
:=
动态声明值的变量,或者只需使用=
将值分配给现有变量。当我想将一个返回值分配给一个已经存在的变量,同时为另一个变量声明一个新变量时,就会出现问题
我目前只通过预先分配值和声明所需的变量(bar
,在本例中)解决了这个问题,如下面的代码片段:
package main
import (
"fmt"
)
func getFooAndBar() (foo string, bar string) {
return "Foo", "Bar"
}
func main() {
var foo = "default"
var condition = true
if condition {
var bar string // Would like to avoid this step if possible
foo, bar = getFooAndBar()
fmt.Println(bar)
}
fmt.Println(foo)
}
如果我使用:=
它无法生成,原因是:
./app.go:16:foo已声明且未使用
那么,是否有可能避免单独声明
条的步骤呢?在这种情况下,您不能使用短变量声明“:=”
来重新声明foo
变量,根据:
与常规变量声明不同,短变量声明可能
重新声明变量,前提是这些变量最初是在
具有相同类型的相同块,并且至少有一个非空
变量是新的。因此,重新声明只能出现在
多变量短声明。重新声明不会引入
新变量;它只是将一个新值赋给原始值
通过消除/app.go:16:foo声明和未使用
func main() {
var foo = "default"
var condition = true
if condition {
foo, bar := getFooAndBar()
fmt.Println(bar) // prints: Bar
fmt.Println(foo) // prints: Foo
// _ = foo
}
fmt.Println(foo) // prints: default
}
在这种情况下,foo
在if
块中声明,此声明将创建一个新变量在外部块中隐藏原始foo
变量,只有在foo
声明并在同一块中使用多变量短声明重新声明后,才会重新声明foo
func main() {
var foo = "default"
foo, bar := getFooAndBar()
fmt.Println(bar) //prints: Bar
fmt.Println(foo) //prints: Foo
}
因为:=
会创建一个新的foo
阴影,你不能在这里使用它。你所拥有的是做这件事的方法(:=
毕竟只是一条捷径)。