Unicode 连接net.Addr和[]符文

Unicode 连接net.Addr和[]符文,unicode,go,Unicode,Go,我想使用:,将a和[]符文的文本表示形式连接起来,生成一个新的[]符文。最惯用的方法是什么 我目前有空格和显式键入,用于示例: var ( netAddr net.Addr someRunes []rune _ []rune = append( append( []rune(netAddr.String()), []rune("

我想使用:,将a和[]符文的文本表示形式连接起来,生成一个新的[]符文。最惯用的方法是什么

我目前有空格和显式键入,用于示例:

var (
    netAddr   net.Addr
    someRunes []rune 
    _         []rune = append(
                  append(
                      []rune(netAddr.String()),
                      []rune(": ")...),
                  someRunes...
              )
)
首先要清楚考虑,如果有问题,以后再优化


首先要清楚和考虑,如果出现问题,请稍后进行优化。

如果您只想让代码清晰易懂,请执行以下操作:

[]rune(netAddr.String() + ": " + string(someRunes))
这是低效的,因为里面有一些不必要的副本,但它以一种人类可以轻松阅读的方式传达了逻辑。如果您的探查器稍后告诉您这是一个瓶颈,那么您的多附加解决方案可能仍会执行超出必要的复制/分配。我会这样做:

sep := []rune(": ")
addr := []rune(netAddr.String())
newRuneSlice = make([]rune, 0, len(addr) + len(sep) + len(someRunes))
newRuneSlice = append(newRuneSlice, addr...)
newRuneSlice = append(newRuneSlice, sep...)
newRuneSlice = append(newRuneSlice, someRunes...)
我的猜测是,您的分析器不会告诉您这是一个瓶颈,所以一行程序很可能是最好的。但是,您应该知道,一行程序仅适用于有效的unicode。如果你在你的符文片段中有无效的代码点或代理项对,那么你最终会用错误符文替换它们。在大多数情况下,这不是问题,但值得考虑

例如:


如果您只是希望代码清晰易懂,请执行以下操作:

[]rune(netAddr.String() + ": " + string(someRunes))
这是低效的,因为里面有一些不必要的副本,但它以一种人类可以轻松阅读的方式传达了逻辑。如果您的探查器稍后告诉您这是一个瓶颈,那么您的多附加解决方案可能仍会执行超出必要的复制/分配。我会这样做:

sep := []rune(": ")
addr := []rune(netAddr.String())
newRuneSlice = make([]rune, 0, len(addr) + len(sep) + len(someRunes))
newRuneSlice = append(newRuneSlice, addr...)
newRuneSlice = append(newRuneSlice, sep...)
newRuneSlice = append(newRuneSlice, someRunes...)
我的猜测是,您的分析器不会告诉您这是一个瓶颈,所以一行程序很可能是最好的。但是,您应该知道,一行程序仅适用于有效的unicode。如果你在你的符文片段中有无效的代码点或代理项对,那么你最终会用错误符文替换它们。在大多数情况下,这不是问题,但值得考虑

例如:


这很有趣,因为你的姓是乔伊纳。@Tom:我从来没有想到过这一点:D。我现在应该叫马特·康塔纳。@马特·乔伊纳:你的化身是马特·康塔特或马特·康塔特!这很有趣,因为你的姓是乔伊纳。@Tom:我从来没有想到过这一点:D。我现在应该叫马特·康塔纳。@马特·乔伊纳:你的化身是马特·康塔特或马特·康塔特!你错过了一些符文,你错过了一些符文。