2 回答
TA贡献1818条经验 获得超3个赞
它在规范中描述here。它要求内部函数为所有参数返回正确的类型。不允许额外参数以及返回多个值的函数。
作为一种特殊情况,如果函数或方法 g 的返回值在数量上相等并且可以单独分配给另一个函数或方法 f 的参数,那么调用 f(g(parameters_of_g)) 将在绑定返回值后调用 f g 到 f 的参数的顺序。除了 g 的调用外,f 的调用不能包含任何参数,并且 g 必须至少有一个返回值。如果 f 有一个最终的 ... 参数,它会被分配给常规参数分配后保留的 g 的返回值。
func Split(s string, pos int) (string, string) {
return s[0:pos], s[pos:]
}
func Join(s, t string) string {
return s + t
}
if Join(Split(value, len(value)/2)) != value {
log.Panic("test fails")
}
如果不满足这些特定条件,则需要分配返回值并单独调用该函数。
TA贡献1865条经验 获得超7个赞
我有同样的问题。我能想到的最佳解决方案是为我想要的额外参数创建类型或结构,并为它们编写方法,如下所示:
package main
import (
"fmt"
)
type Message string
type MessageNumber struct {
Message string
Number int
}
func testfunc() (foo int, bar int) {
foo = 4
bar = 2
return
}
func (baz Message) testfunc2(foo int, bar int) {
fmt.Println(foo, bar, baz)
}
func (baz MessageNumber) testfunc3(foo int, bar int) {
fmt.Println(foo, bar, baz.Number, baz.Message)
}
func main() {
Message("the answer").testfunc2(testfunc())
MessageNumber{"what were we talking about again?", 0}.testfunc3(testfunc())
fmt.Println("Done. Have a day.")
}
输出如下所示:
user@Frodos-Atari-MEGA-STE:~/go/test$ go run main.go
4 2 the answer
4 2 0 what were we talking about again?
Done. Have a day.
- 2 回答
- 0 关注
- 239 浏览
添加回答
举报