fmt.Fprintf 包装器中的可变函数参数传递问题
本文解决了创建简单的 fmt.Fprintf 包装器时遇到的问题接受可变数量的参数。
问题:调用包装器时输出不正确
调用包装器函数 Die("foo") 时,会产生意外的输出: "foo%!(EXTRA []interface {}=[])"。这提出了两个问题:
解决方案:使用 Spread 运算符
Go 中的可变参数函数将参数作为切片接收。在本例中,包装函数 Die 有一个 []interface{} 类型的参数 args。但是,当将此参数传递给 fmt.Sprintf 时,它被视为 []interface{} 类型的单个参数。
要解决此问题并将 args 中的每个值作为单独的参数传递,请使用扩展运算符必须使用 (...)。通过将此语法添加到 fmt.Sprintf 调用中,args 中的各个值将相应地扩展和传递:
str := fmt.Sprintf(format, args...)
此方法可确保包装器函数将变量参数正确传递给 fmt.Fprintf。
以上是为什么在使用可变参数调用 `fmt.Fprintf` 包装器时会出现'foo%!(EXTRA []interface {}=[])”?的详细内容。更多信息请关注PHP中文网其他相关文章!