Go 中的可变参数函数接受可变数量的参数,这些参数存储为指定类型的切片。调用可变参数函数时,了解参数的传递方式至关重要。
考虑以下尝试围绕 fmt.Fprintf 创建包装器的代码使用可变长度参数:
func Die(format string, args ...interface{}) { str := fmt.Sprintf(format, args) fmt.Fprintf(os.Stderr, "%v\n", str) os.Exit(1) }
调用 Die("foo") 时,输出包含意外的“%%!(EXTRA []interface {}=[])”。
问题是由于传递 args 切片而引起的直接到 fmt.Sprintf。要正确地单独传递参数,必须使用省略号运算符 ...:
package main import ( "fmt" "os" ) func Die(format string, args ...interface{}) { str := fmt.Sprintf(format, args...) fmt.Fprintf(os.Stderr, "%v\n", str) os.Exit(1) } func main() { Die("foo") }
通过使用 ...,args 切片的每个元素都作为单独的参数传递给 fmt.Sprintf,从而解决发出并产生预期的输出:
foo
以上是为什么我的 fmt.Fprintf 包装器打印意外的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!