multiple-variable-return
全部标签 funcmain(){gospinner(100*time.Millisecond)constn=45fibN:=fib(n)//slowfmt.Printf("\rFibonacci(%d)=%d\n",n,fibN)}funcspinner(delaytime.Duration){for{for_,r:=range`-\|/`{fmt.Printf("\r%c",r)time.Sleep(delay)}}}funcfib(xint)int{ifx能否解释一下上面的fib函数,结果是如何得到的。fib函数返回一个fib调用,最终结果是怎么来的? 最佳答案
请看下面两个代码片段:代码1:funcgetIntJ1()(jint32){for{j=20return}}代码2:funcgetIntJ2()(jint32){fortrue{j=20return}}Playground:https://play.golang.org/p/ZnwjZDksZhu我认为他们应该在控制台中打印相同的值20,但他们不能执行我想要的操作。code1可以在控制台打印值20,但是code2出现编译错误:missingreturnatendoffunction。它们在函数中都有一个无限循环,为什么它们显示的结果不同? 最佳答案
我正在尝试在Go中做一些相对简单的事情——将字符串转换为整数,然后将其加倍:myInt,_:=strconv.Atoi(args[1])doubleArg:=myInt*2由于Atoi()返回两个参数(整数和err),我使用myInt,_:=来检索值的整数。我想将它加倍(因此是第二行)但不能在一行中完成所有操作:myInt,_:=strconv.Atoi(args[1])*2给我:multiple-valuestrconv.Atoi()insingle-valuecontext但是,根据我使用大多数其他语言的经验,必须在两行中执行此操作似乎有很多样板。这只是我必须处理的一个限制,还是有
packagemainimport("fmt")funciLoveGoLang(signstring)(int,int){ifsign=="!"{return(14-2),(3+3-6);}elseifsign=="@"{return(41-(20*2)),(5-4)}elseifsign=="$"{return1,3}elseifsign=="^"{return2,2}elseifsign=="5"{return3,2}elseifsign=="("{return(4*2)-1,1}elseifsign==")"{return(2*2),2}elseifsign=="d"{retur
我的目录结构是这样的:Animal/dog/chiwawa.gorabbit.gochiwawa.go和rabbit.go都在文件顶部打包名为:“packageanimal”。但是,当我尝试在rabbit.go中使用chiwawa.go中的变量varFood=apple时,出现错误-undefined:食物。当我将chiwawa.go直接放在Animal下而没有dog目录时,我没有任何问题。这在Go中是故意的吗?我可以在保留包名称和目录结构的同时解决这个问题吗? 最佳答案 HowtoWriteGoCodeWorkspacesTheg
编译器说每个已定义的变量都在5行后再次定义并引发错误,当然我没有在5行后重新定义所有变量,我该如何停止这个错误?这是其中一个结构的示例typeHolderstruct{NamestringHolders_needintAvailint}它声称在32之类的结构关闭后的行上有redifend我已经找到了答案 最佳答案 您应该添加一些代码并让我们确切知道您在做什么。您可能在初始化变量后使用:=而不是=。例如i:=1//useii=2//changevalueofiusing=sinceihasalreadybeendeclared//i:
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭6年前。Improvethisquestion同时操作3个或更多数据库,读/写拆分,有连接池。
typeUserModelstruct{...}func(u*UserModel)C()string{return"system_users"}上面将一个嵌入的结构分配给类型UserModel,Go是否允许用vars或consts做同样的事情?有点像var(u*UserModel)C="system_users"你明白了。 最佳答案 方法方法是一个函数,其接收者绑定(bind)到一个类型。接收方可以采用一个值或一个指向方法绑定(bind)到的类型的指针。Gobyexample提供了这个很好的example:typerectstruc
我对go/编码比较陌生。我希望能够通过使用变量来引用变量。vara=make([]int,0)varb=make([]int,0)varc=make([]int,0)我定义了一些sliceset:=input.Ask("Whichsetwouldyouliketoinputto(a,b,c):")fortrue{num:=input.Ask("Number:")strings.toLower(set)=append(strings.toLower(set),num)}我希望“strings.tolower”部分输出一个字符串,它确实如此,这将允许我选择我定义的变量之一。
考虑以下函数:funcmain(){varaint=3sum:=func(){a=a*2}sum()sum()fmt.Println(a)//returns12}但是:funcmain(){varaint=3sum:=func()(aint){a=a*2;return}sum()sum()fmt.Println(a)//returns3}我不能完全理解这种行为的逻辑:为什么它会在a=a*2之后返回a的旧值 最佳答案 就像@TimCooper评论的那样,您正在隐藏“a”。如果运行下面的代码,您将看到两个不同的内存地址。表示是“2个变量