gpt4 book ai didi

syntax - 如何区分从具有多个返回值的函数中分配和声明值?

转载 作者:IT王子 更新时间:2023-10-29 00:59:22 26 4
gpt4 key购买 nike

当从一个函数中检索多个返回值时,我了解到您可以使用 := 为这些值动态声明变量,或者通过简单地使用 = 将值分配给已经存在的变量。当我想将一个返回值分配给一个已经存在的变量,同时为另一个返回值声明一个新变量时,我的问题就出现了。

我目前已经通过预先分配值和声明所需变量(在本例中为 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 declared and not used

那么,是否有可能以某种方式避免单独声明 bar 的步骤?

最佳答案

在这种情况下,您不能使用短变量声明 ":=" 来重新声明 foo 变量,根据 spec :

Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.

通过消除 ./app.go:16: foo declared and not used

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 block 中声明的,该声明将创建一个新变量 来隐藏原始的 foo 外部 block 中的变量,仅当您声明了 foo 并在 same 中使用多变量短声明重新声明它时,才会发生 foo 的重新声明阻止

func main() {
var foo = "default"
foo, bar := getFooAndBar()
fmt.Println(bar) //prints: Bar
fmt.Println(foo) //prints: Foo
}

关于syntax - 如何区分从具有多个返回值的函数中分配和声明值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com