如果您只是希望代码清晰易懂,请执行以下操作:
[]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。如果你的符文切片中有无效的代码点或代理对(从 Go 1.1 开始),你最终会得到替换它们的错误符文。在大多数情况下,这不是问题,但值得考虑。
示例:http ://play.golang.org/p/AFoBX_2Wem
invalid := utf8.MaxRune + 1
fmt.Println([]rune(string(invalid))[0] == utf8.RuneError) // prints true