如何使用前缀参数更改 fmt.Println 的结果
How to change the result of fmt.Println with a prefix argument
我有以下代码:
import "fmt"
func main() {
P("1","2","3",0)
}
func P(prefix string,a ...interface{}){
fmt.Println(prefix,a)
}
结果是:
1 [2 3 0]
但我希望得到以下结果之一:
1 2 3 0
[1 2 3 0]
换句话说:所有参数都同等重要,因此不应以特殊方式处理任何参数。
import "fmt"
func main() {
P("1","2","3",0)
}
func P(a ...interface{}){
fmt.Println(a)
}
结果是:
[1 2 3 0]
Evgeny 的解决方案(更改函数签名)是最好的,但是如果您出于任何原因无法更改函数签名:
func P(prefix string, a ...interface{}) {
toPrint := []interface{}{prefix}
toPrint = append(toPrint, a...)
fmt.Println(toPrint...) // 1 2 3 0
// without the `...` you get [1 2 3 0]
}
或者您可以 fmt.Printf
循环:
func P(prefix string, a ...interface{}) {
fmt.Print(prefix)
for _, aa := range a {
fmt.Printf(" %v", aa)
}
fmt.Println() // for your final newline
}
当然,甚至 更好 解决方案涉及消除对您传递的类型的所有疑问。interface{}
没有任何意义 - 定义一个类型并坚持使用它!
我有以下代码:
import "fmt"
func main() {
P("1","2","3",0)
}
func P(prefix string,a ...interface{}){
fmt.Println(prefix,a)
}
结果是:
1 [2 3 0]
但我希望得到以下结果之一:
1 2 3 0
[1 2 3 0]
换句话说:所有参数都同等重要,因此不应以特殊方式处理任何参数。
import "fmt"
func main() {
P("1","2","3",0)
}
func P(a ...interface{}){
fmt.Println(a)
}
结果是:
[1 2 3 0]
Evgeny 的解决方案(更改函数签名)是最好的,但是如果您出于任何原因无法更改函数签名:
func P(prefix string, a ...interface{}) {
toPrint := []interface{}{prefix}
toPrint = append(toPrint, a...)
fmt.Println(toPrint...) // 1 2 3 0
// without the `...` you get [1 2 3 0]
}
或者您可以 fmt.Printf
循环:
func P(prefix string, a ...interface{}) {
fmt.Print(prefix)
for _, aa := range a {
fmt.Printf(" %v", aa)
}
fmt.Println() // for your final newline
}
当然,甚至 更好 解决方案涉及消除对您传递的类型的所有疑问。interface{}
没有任何意义 - 定义一个类型并坚持使用它!