为了账号安全,请及时绑定邮箱和手机立即绑定

将项目追加到可变函数包装器中,而无需重新分配新的分片

将项目追加到可变函数包装器中,而无需重新分配新的分片

Go
慕尼黑8549860 2021-05-05 17:14:38
好的,我需要一个fmt.Printf()的小包装来方便调试:1 /“在调用fmt.Fprintln时有太多参数”:func Debug (a ... interface{}) {    if debug {        fmt.Fprintln(out, prefix, sep, a...)    }}2 /“接口类型中不允许使用名称列表”:func Debug (a ... interface{}) {    if debug {        fmt.Fprintln(out, []interface{prefix, sep, a...}...)    }}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...)    }}有什么想法可以避免分配额外的内存吗?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我只做两张照片:


func Debug(a ...interface{}) {

    if debug {

        fmt.Fprint(out, prefix, sep)

        fmt.Fprintln(out, a...)

    }

}

如果您认为需要致电Fprint,可以这样做,


func Debug(a ...interface{}) {

    if debug {

        fmt.Fprint(out, prefix, sep, fmt.Sprintln(a...))

    }

}

无论哪种方式,构建新切片似乎都比较简单。


查看完整回答
反对 回复 2021-05-10
?
青春有我

TA贡献1784条经验 获得超8个赞

您也可以使用append单线:


func Debug (a ...interface{}) {

    if debug {

        fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...}...)

    }

}


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信