文章目录
1. 字符串
1.1 字符串的长度
- Go的字符串是 UTF-8 字符的一个序列(ASCII 码表字符 - 占用 1 字节;其它字符 - 占 2~4 字节)=> 字节长度的不定性
len
常规长度函数;utf8.RuneCountInString
- 将所有字符长度记为1
例子 - 英文字符1字节,中文字符3字节
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "hello"
fmt.Println(len(s)) // 5
s = "hello你好"
fmt.Println(len(s)) // 11
fmt.Println(utf8.RuneCountInString(s)) // 5
}
1.2 如何改变字符串的内容?
字符串是值类型 - 不可改变的
// 非法操作!
s := "hello"
s[0] = 'T'
想改变字符串的内容,可借助byte切片
// 字符串 -> 字节切片 -> 字符串
package main
import "fmt"
func main() {
s := "hello"
b := []byte(s)
b[0] = 'T'
s = string(b)
fmt.Println(s) // Tello
}
中文字节不是1,使用不能使用byte切片,否则会有奇怪的输出 => 要使用rune切片
package main
import "fmt"
func main() {
s := "hello你好"
// byte 切片 -> 奇怪的输出
b := []byte(s)
for i := 0; i < len(b); i++ {
fmt