r--*_*--k 5 variadic-functions go
好的,我需要一个fmt.Printf()的小包装来调试便利性:
1 /“在调用fmt.Fprintln时有太多参数”:
func Debug (a ... interface{}) {
if debug {
fmt.Fprintln(out, prefix, sep, a...)
}
}
Run Code Online (Sandbox Code Playgroud)
2 /“接口类型中不允许使用名称列表”:
func Debug (a ... interface{}) {
if debug {
fmt.Fprintln(out, []interface{prefix, sep, a...}...)
}
}
Run Code Online (Sandbox Code Playgroud)
3 /有效,但感觉不对:
func Debug (a ... interface{}) {
if debug {
sl := make ([]interface{}, len(a) + 2)
sl[0] = prefix
sl[1] = sep
for i, v := range a {
sl[2+i] = v
}
fmt.Fprintln(out, sl...)
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法可以避免分配额外的内存吗?
我只会做两个打印:
func Debug(a ...interface{}) {
if debug {
fmt.Fprint(out, prefix, sep)
fmt.Fprintln(out, a...)
}
}
Run Code Online (Sandbox Code Playgroud)
如果你认为你需要对 Fprint 进行一次调用,你可以这样做,
func Debug(a ...interface{}) {
if debug {
fmt.Fprint(out, prefix, sep, fmt.Sprintln(a...))
}
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,似乎都比构建新切片更简单。
您还可以append用于单线:
func Debug (a ...interface{}) {
if debug {
fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...}...)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |