根據幾組帖子,下面的代碼應該工作:如何在Go中包裝var參數?
package main
import "fmt"
func demo(format string, args ...interface{}) {
var count = len(args)
for i := 0; i < count; i++ {
fmt.Printf("! %s\n", args[i])
}
fmt.Printf("%+v\n", format)
fmt.Printf("%+v\n", args)
fmt.Printf(format, args)
fmt.Printf("\n")
}
func main() {
demo("%s %d", "Hello World", 10)
fmt.Printf("\n\n")
demo("%d %s", 10, "Hello")
}
和產量的 「Hello World 10」 和 「10你好」,但事實並非如此。相反,它產生:
! Hello World
! %!s(int=10)
%s %d
[Hello World 10]
[Hello World %!s(int=10)] %d(MISSING)
! %!s(int=10)
! Hello
%d %s
[10 Hello]
[10 %!d(string=Hello)] %s(MISSING)
這是說,通過[]接口{}到需要...接口{}作爲自變量的函數不展開爭論,而是簡單地將其作爲值。第一個%s將[] interface {}擴展爲一個字符串,並且不再處理任何參數。
我確定必須有很多情況下需要記錄這些;但我找不到任何有關如何做的實例。
這是基本的功能C.
啊,謝謝對於下一個找不到這個的人來說,它隱藏在這裏作爲規範中的一個註釋:http://golang.org/ref/sp ec#Passing_arguments_to _..._參數 – Doug
@Doug,[這也在「Effective Go」中解釋](http://golang.org/doc/effective_go.html#printing),這似乎是任何人都必須閱讀的新內容語言。 – kostix