我很困惑如何从函数返回值。我正在尝试以下示例:
因此函数应返回字符串“ true”和布尔值true,但它返回字符串“ false”和布尔值false
package main
import (
"fmt"
)
func a(c bool) (string, bool) {
if c {
return "true", true
}
a(true)
return "false", false
}
func main() {
s, ok := a(false)
fmt.Println(s, ok)
}
答案 0 :(得分:3)
当c
为false时,您的递归代码将始终返回false。请在下面查看正确的代码。
package main
import (
"fmt"
)
func a(c bool) (string, bool) {
if c {
return "true", true
}
return a(true)
}
func main() {
s, ok := a(false)
fmt.Println(s, ok)
}
答案 1 :(得分:0)
尚不清楚您认为代码应该做什么,但这是它的实际作用:
您用值a
呼叫false
:
它检查c
是否为真:
if c {
但不是,所以继续
它再次调用a
,这次使用值true
,但完全忽略了结果:
a(true)
然后返回false:
return "false", false
这意味着第2步是完全禁止操作的操作(可能已被编译器完全删除)。
也许您想对返回的值a(true)
做些什么?
答案 2 :(得分:0)
这将导致2级递归。在第一级中,您将c设置为false。然后,您调用a(true),您进入了返回true的第二级。现在您回到第1层的a(true)行,下一行将作为字符串和布尔返回false。因此,最终输出为false。
我认为您正在尝试使用返回值,而现在并非如此。