rune类型就相当于Go语言中的char,占4个字节,为int32别名
使用range遍历 postion, rune
对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| s := "Yes我爱Go语言!"
for _, b := range []byte(s) { fmt.Printf("%X ", b) }
for i, ch := range s { fmt.Printf("(%d %X) ", i, ch) }
59 65 73 E6 88 91 E7 88 B1 47 6F E8 AF AD E8 A8 80 21 (0 59) (1 65) (2 73) (3 6211) (6 7231) (9 47) (10 6F) (11 8BED) (14 8A00) (17 21)
|
使用utf8.RuneCountInString
获得字符的数量,因为使用len()只能获得字节数(英文占1个字节,中文3个utf-8编码下)
1 2 3
| fmt.Println("len count":len(s))
fmt.Println("Rune count:", utf8.RuneCountInString(s))
|
使用[]byte
获得字节,使用[]rune
会获得字符切片, 实际上是用该类型的切片进行强制转换
1 2 3 4 5 6
| s := "Yes我爱Go语言!" for _, b := range []byte(s) { fmt.Printf("%X ", b) }
59 65 73 E6 88 91 E7 88 B1 47 6F E8 AF AD E8 A8 80 21
|
使用utf8.DecodeRune
将utf8解码为四字节unicode,但是Unicode中文编码只用了两个字节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package main
import ( "fmt" "unicode/utf8" )
func main() { s := "我" a := []byte(s) ch, size := utf8.DecodeRune(a) fmt.Printf("%X, %d",ch, size) }
6211, 3
|
字符串的其他操作,都在strings.
包内
- Fieds Split Join
- Contains, Index
- ToLower ToUpper
- Trim TrimRight TrimLeft