亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從字符串轉換時如何確定 []rune 的容量

從字符串轉換時如何確定 []rune 的容量

Go
catspeake 2022-06-13 16:50:58
有人可以解釋為什么我在轉換相同string的容量時會得到不同的容量[]rune嗎?看看這段代碼package mainimport (    "fmt")func main() {    input := "你好"                runes := []rune(input)    fmt.Printf("len %d\n", len(input))    fmt.Printf("len %d\n", len(runes))    fmt.Printf("cap %d\n", cap(runes))    fmt.Println(runes[:3])}哪個回報len 6len 2cap 2panic: runtime error: slice bounds out of range [:3] with capacity 2但是當評論fmt.Println(runes[:3])它返回時:len 6len 2cap 32看看 [] 符文容量是如何從 2 變為 32 的。如何?為什么 ?如果你想測試 =>去游樂場
查看完整描述

2 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

只要轉換的結果切片包含輸入字符串的符文,容量就可以更改為任何值。這是規范要求和保證的唯一事情。如果您將其傳遞給,編譯器可能會決定使用較低的容量,fmt.Println()因為這表明切片可能會逃逸。同樣,編譯器做出的決定不在您的掌控之中。

轉義意味著值可能會從函數中逃逸,因此,它必須分配在堆上(而不是堆棧上),因為一旦函數返回,堆??赡軙黄茐?覆蓋,如果值從該函數,只要有對該值的引用,就必須保留其內存區域。Go 編譯器執行轉義分析,如果它不能證明一個值沒有轉義它聲明的函數,則該值將分配到堆上。


查看完整回答
反對 回復 2022-06-13
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

string[]rune返回不同結果的原因len是它計算了不同的東西;len(string)返回以字節為單位的長度(可能大于字符數,對于多字節字符),同時len([]rune)返回 rune 切片的長度,即 UTF-8 rune 的數量(通常為字符數) .

這篇博文詳細介紹了 Go 究竟如何處理各種形式的文本:https ://blog.golang.org/strings


查看完整回答
反對 回復 2022-06-13
  • 2 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號