如果你只是想你的代碼清晰易懂,做這樣的事情:
[]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
這很有趣,原因你姓木。 – thwd
@Tom:我從來沒有想過:D。我現在應該叫Matt Concatenator。 –
@Matt Joiner:有了你的頭像,它是Matt的Contra Cat或者Matt ConCat! – peterSO