企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 1.字符串 Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型`(int、bool、float32、float64 等)`一样。 Go 语言里的字符串的内部实现使用UTF-8编码 ~~~ s1 := "hello" s2 := "你好" ~~~ Go语言中的字符串是一个字节切片 rune 是 Go 语言的内建类型,它也是 int32 的别称。在 Go 语言中,rune 表示一个代码点。代码点无论占用多少个字节,都可以用一个 rune 来表示 ~~~ package main import ( "fmt" ) func printBytes(s string) { for i:= 0; i < len(s); i++ { fmt.Printf("%x ", s[i]) } } func printChars(s string) { runes := []rune(s) for i:= 0; i < len(runes); i++ { fmt.Printf("%c ",runes[i]) } } func printCharsAndBytes(s string) { for index, rune := range s { fmt.Printf("%c starts at byte %d\n", rune, index) } } func main() { name := "Hello World" printBytes(name) fmt.Printf("\n") printChars(name) fmt.Printf("\n\n") name = "Señor" printBytes(name) fmt.Printf("\n") printChars(name) } ~~~ ### 1.1 多行字符串 Go语言中要定义一个多行字符串时,就必须使用`反引号`字符: ~~~ s1 := `第一行 第二行 第三行 ` fmt.Println(s1) ~~~ 反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出 ### 1.2 字符串的常用操作 | 方法 | 介绍 | | --- | --- | | len(str) | 求长度 | | +或fmt.Sprintf | 拼接字符串 | | strings.Split | 分割 | | strings.Contains | 判断是否包含 | | strings.HasPrefix,strings.HasSuffix | 前缀/后缀判断 | | strings.Index(),strings.LastIndex() | 子串出现的位置 | | strings.Join(a[]string, sep string) | join操作 | ### 1.3 utf8.RuneCountInString(s) utf8 package包中的`func RuneCountInString(s string) (n int)`方法用来获取字符串的长度。这个方法传入一个字符串参数然后返回字符串中的 rune 的数量 ~~~ func length(s string) { fmt.Printf("length of %s is %d\n", s, utf8.RuneCountInString(s)) } ~~~ ### 1.4 修改字符串 要修改字符串,需要先将其转换成`[]rune或[]byte`,完成后再转换为`string`。无论哪种转换,都会重新分配内存,并复制字节数组。 ~~~ func changeString() { s1 := "hello" // 强制类型转换 byteS1 := []byte(s1) byteS1[0] = 'H' fmt.Println(string(byteS1)) s2 := "博客" runeS2 := []rune(s2) runeS2[0] = '狗' fmt.Println(string(runeS2)) } ~~~ ## 字符串处理函数包 strings strconv ***** 【知识点】 * Go 中的字符串是不可变的。一旦一个字符串被创建,那么它将无法被修改 * string是数据类型不是引用或指针类型; * string是只读的byte slice,len函数=string包含的byte数组长度 * string的byte可以存放任何数据