首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接net.Addr和[]符文

连接net.Addr和[]符文
EN

Stack Overflow用户
提问于 2013-05-31 23:19:20
回答 2查看 95关注 0票数 1

我想使用": "连接net.Addr[]rune的文本表示,从而生成一个新的[]rune。做这件事最常用的方式是什么?

我目前有(出于示例目的,使用空格和显式类型):

代码语言:javascript
复制
var (
    netAddr   net.Addr
    someRunes []rune 
    _         []rune = append(
                  append(
                      []rune(netAddr.String()),
                      []rune(": ")...),
                  someRunes...
              )
)
EN

回答 2

Stack Overflow用户

发布于 2013-06-01 05:55:22

如果你只是想让你的代码清晰易懂,你可以这样做:

代码语言:javascript
复制
[]rune(netAddr.String() + ": " + string(someRunes))

这是低效的,因为里面有一些不必要的副本,但它以一种人类可以轻松阅读的方式传达了逻辑。如果您的分析器后来告诉您这是一个瓶颈,那么您的多重追加解决方案可能仍然会执行比必要的更多的复制/分配。我会这样做:

代码语言:javascript
复制
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很可能是最好的。但是,您应该知道,one liner只适用于有效的unicode。如果你的符文片段中有无效的代码点或代理对(从Go 1.1开始),你将以错误符文代替它们而结束。对于大多数情况,这不是问题,但它值得考虑。

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

代码语言:javascript
复制
invalid := utf8.MaxRune + 1
fmt.Println([]rune(string(invalid))[0] == utf8.RuneError) // prints true
票数 3
EN

Stack Overflow用户

发布于 2013-06-01 02:04:50

代码语言:javascript
复制
[]rune(netAddr.String()+": ")

首先要清楚和仔细考虑,如果有问题,以后再优化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16860654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档