gpt4 book ai didi

unicode - 连接 net.Addr 和 []rune

转载 作者:IT王子 更新时间:2023-10-29 01:53:25 24 4
gpt4 key购买 nike

我想加入一个net.Addr的文本表示,以及一个使用 ": "[]rune,从而产生一个新的 []rune。执行此操作最惯用的方法是什么?

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

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...)

我的猜测是您的探查器不会告诉您这是一个瓶颈,所以一个衬里很可能是最好的。但是,您应该知道,one liner 仅适用于有效的 unicode。如果你的 rune slice 中有无效的代码点或代理对(从 Go 1.1 开始),你最终会用错误 rune 替换它们。在大多数情况下,这不是问题,但值得考虑。

示例:http://play.golang.org/p/AFoBX_2Wem

invalid := utf8.MaxRune + 1
fmt.Println([]rune(string(invalid))[0] == utf8.RuneError) // prints true

关于unicode - 连接 net.Addr 和 []rune,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16860654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com