2 回答

TA貢獻1909條經驗 獲得超7個贊
rune
是 Go 中的一種類型。它只是 的別名int32
,但通常用于表示 Unicode 點。rune()
不是函數,它是類型轉換為rune
. Go 中的轉換總是具有type()
可能使它們看起來像函數的語法。
代碼的第一位失敗,因為 Go 中沒有定義字符串到數字類型的轉換。然而,將字符串轉換為 runes/int32s 切片在語言規范中是這樣定義的:
將字符串類型的值轉換為 runes 類型的切片會產生一個切片,其中包含字符串的各個 Unicode 代碼點。[ golang.org ]
因此,您的示例打印出一片符文,其值為 102、111 和 111

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。行情已編輯。
- 2 回答
- 0 關注
- 335 瀏覽
添加回答
舉報