1.1.1. 一、string 底层是一个 byte 数组,因此 string 也可以进行切片处理。
例子如下:
str := "hello,你好"
//按照字节切片,如果切片的地方有中文,fmt.Println(slice1)会乱码
slice1 := str[1:]
fmt.Println(slice1)// ello,你好
注意:string按照字节切片,如果切片的地方有中文,fmt.Println(slice1)输出会乱码。
1.1.2. 二、 string 是不可变的,也就说不能通过 str[0] = 'z' 方式来修改字符串。
str := "hello,你好"
str[0] = 'm' // 编译报错
如果需要修改字符串,可以先将 string 转换为 []byte 或者[]rune切片,再修改切片,然后 重写转成 string。
方式1:字符串 强制转换--->[]byte切片--->改变切片的元素之后,强制转换-->字符串。[]byte作为中间类型。这种方式如果被替换的是中文会乱码。
str := "hello,你好"
arr1 := []byte(str) //强制转换为切片类型
//[104 101 108 108 111 239 188 140 228 189 160 229 165 189]
fmt.Println(arr1)
arr1[0] = 'm'
// string(arr1) 强制转换为string输出:mello,你好
fmt.Println(string(arr1))
方式2:string强制转换-->[]rune--->改变切片的元素之后,强制转换-->字符串。[]rune作为中间类型。可以处理中文等。
str := "大家好 hello"
arr1 := []rune(str) //强制转换为rune切片类型
//[22823 23478 22909 32 104 101 108 108 111]
fmt.Println(arr1)
arr1[0] = 'm'
// string(arr1) 强制转换为string输出:m家好 hello
fmt.Println(string(arr1))