GoLang之string底层系列(string基础)

1.范围

image-20220305174626604

image-20220305174641638

2.介绍

image-20220120113854776

image-20220305174612730

3.加号拼接

image-20220124155759807

4.下标切割

a[1:3]的返回值仍然是字符串

image-20220106213117092

5.利用%c%v正确遍历字符串

因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现下面输出中第一行的结果。

字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的。字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。

func main() {
	var b string = "eggo世界"
	for _, r := range b {
		fmt.Printf("%v\n", r)
		fmt.Printf("%c\n", r)
	}
}

/*101
e    
103  
g    
103  
g    
111  
o    
19990
世   
30028
界   
*/

6.修改字符串

要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组

image-20220120165402709

7.整数不能转化为字符串

image-20220210223226483

8.多行内容

image-20220120114154639

9.string型切片输出无引号

10.字符串转义符

image-20220120113958643

image-20220210224019376

11.参数传递不会改变值

package main
import "fmt"
func main() {
   name := "张三"
   fmt.Println(modify(name))
   fmt.Println(name)
}
func modify(s string) string {
   s = s + s
   return s
}
/*输出一下:
张三张三
张三
*/

/*基本类型举例子:以上是一个操作字符串的例子,通过打印的结果,可以看到,本来 name 的值并没有被改变,也就是说,我们传递的时一个副本,并且返回一个新创建的字符串。
*/

12.[]rune(str)

func main() {
	str := "李陆豪"
	fmt.Println(len(str)) //3
	fmt.Println(str[0:1]) //�
	fmt.Println(str[0:2]) //��
	fmt.Println(str[0:3]) //李

	runes := []rune(str)
	fmt.Println(len(runes))
	fmt.Println(runes[0:1]) //[26446]
	fmt.Println(runes[0:2]) //[26446 38470]
	fmt.Println(runes[0:3]) //[26446 38470 35946]

	fmt.Println(string(runes[0])) //李
	fmt.Println(string(runes[1])) //陆
	fmt.Println(string(runes[2])) //豪
}