Go 从函数返回的正确方法是什么?
我不知道如何从函数返回值。我正在尝试以下示例: 将false传递给函数a 函数a中的c值将为false 它将进行递归调用,这将c的值从false更改为true 所以函数应该返回字符串true和bool true,但它返回的是字符串false和bool falseGo 从函数返回的正确方法是什么?,go,recursion,Go,Recursion,我不知道如何从函数返回值。我正在尝试以下示例: 将false传递给函数a 函数a中的c值将为false 它将进行递归调用,这将c的值从false更改为true 所以函数应该返回字符串true和bool true,但它返回的是字符串false和bool false package main import ( "fmt" ) func a(c bool) (string, bool) { if c { return "true", true } a
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)
}
不清楚您认为您的代码应该做什么,但下面是它实际做的: 调用值为false的: 它检查c是否为真: 但它不是,所以它继续 它再次调用,这次值为true,但完全忽略结果:
a(true)
然后返回false:
return "false", false
这意味着步骤2是一个完全的no-op,可能会被编译器完全删除
也许您想对atrue的返回值做些什么?这将导致2级递归。在第一级中,c为false。然后你调用一个函数,你进入了第二级,返回true。现在您回到了第1级的atrue行,下一行将返回false作为string和bool。因此,最终输出为false
我认为您正在尝试使用返回值,但目前情况并非如此。当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)
}
你为什么认为你会改变c的值?代码中的任何内容都不会更改该值。同时,对a的调用也会被完全忽略。@Flimzy函数a应该返回true,true,但它返回false,false。所有人都想知道为什么你认为它应该回归真实?只有当c为true时,它才会返回true。如果c为false,那么它再次调用a,忽略结果,然后返回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)
}