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

好的,我需要一个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...)

    }

}

有什么想法可以避免分配额外的内存吗?


慕尼黑8549860
浏览 201回答 3
3回答

ABOUTYOU

我只做两张照片: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...))    }}无论哪种方式,构建新切片似乎都比较简单。

青春有我

您也可以使用append单线:func Debug (a ...interface{}) {    if debug {        fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...}...)    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go