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 關注
- 297 瀏覽
添加回答
舉報