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

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

golang的rune()函數是如何工作的

golang的rune()函數是如何工作的

Go
夢里花落0921 2022-03-03 15:13:12
我遇到了一個在線發布的函數,該rune()函數在 golang 中使用了該函數,但我很難查找它是什么。我正在閱讀本教程并且對文檔缺乏經驗,因此很難找到我要查找的內容。具體來說,我想看看為什么這會失敗......fmt.Println(rune("foo"))而這并不fmt.Println([]rune("foo"))
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

rune是 Go 中的一種類型。它只是 的別名int32,但通常用于表示 Unicode 點。rune()不是函數,它是類型轉換為rune. Go 中的轉換總是具有type()可能使它們看起來像函數的語法。

代碼的第一位失敗,因為 Go 中沒有定義字符串到數字類型的轉換。然而,將字符串轉換為 runes/int32s 切片在語言規范中是這樣定義的:

將字符串類型的值轉換為 runes 類型的切片會產生一個切片,其中包含字符串的各個 Unicode 代碼點。[ golang.org ]

因此,您的示例打印出一片符文,其值為 102、111 和 111


查看完整回答
反對 回復 2022-03-03
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

fmt.Println([]rune("foo"))中所述,將字符串轉換為符文 [] 符文切片。當您從字符串轉換為 []rune 時,該字符串中的每個 utf-8 字符都會變成一個 Rune。請參閱https://stackoverflow.com/a/51611567/12817546。同樣,在反向轉換中,當從 []rune 轉換為字符串時,每個 rune 都變成字符串中的一個 utf-8 char。請參閱https://stackoverflow.com/a/51611567/12817546。[]rune 也可以設置為字節、float64、int 或 bool。


package main


import (

    . "fmt"

)


func main() {

    r := []rune("foo")

    c := []interface{}{byte(r[0]), float64(r[0]), int(r[0]), r, string(r), r[0] != 0}

    checkType(c)

}


func checkType(s []interface{}) {

    for k, _ := range s {

        Printf("%T %v\n", s[k], s[k])

    }

}

byte(r[0])設置為“uint8 102”,float64(r[0])設置為“float64 102”,int(r[0])設置為“int 102”,r是符文“[]int32 [102 111 111]”,string(r)打印“string foo”,r[0] != 0并顯示“bool true” .


規范原生支持 []rune 到字符串的轉換。請參閱https://stackoverflow.com/a/46021588/12817546中的評論。在 Go 中,字符串是一個字節序列。但是,由于多個字節可以表示一個符文代碼點,因此字符串值也可以包含符文。因此,它可以轉換為 []rune ,反之亦然。請參閱https://stackoverflow.com/a/19325804/12817546。


注意,Go 中只有兩個內置類型別名,byte(uint8 的別名)和 rune(int32 的別名)。請參閱https://Go101.org/article/type-system-overview.html。符文文字只是 32 位整數值。例如,符文文字“a”實際上是數字“97”。請參閱https://stackoverflow.com/a/19311218/12817546。行情已編輯。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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