1 概述
字符串,string,一串固定长度的字符连接起来的字符集合。Go语言的字符串是使用UTF-8编码的。UTF-8是Unicode的实现方式之一。
Go语言原生支持字符串。使用双引号("")或反引号(``)定义。
双引号:"", 用于单行字符串。
反引号:``,用于定义多行字符串,内部会原样解析。
示例:
// 单行
"心有猛虎,细嗅蔷薇"
// 多行
`
大风歌
大风起兮云飞扬。
威加海内兮归故乡。
安得猛士兮守四方!
`
字符串支持转义字符,列表如下:
r 回车符(返回行首) n 换行符(直接跳到下一行的同列位置) t 制表符 ' 单引号 " 双引号 反斜杠 uXXXX Unicode字符码值转义,例如 "u5eb7" 就是 "康"Go语言中字符串的顶层结构是由一个指针和长度构成的。使用 unsafe.Sizeof("") 会得到16长度,其中8个字节是指针,指向字符串的内存地址,8个是存储字符串的长度。
2 常规操作
以下是针对字符串的操作总结,主要来自于Go语言的API的说明和测试。
[]索引访问
可以使用[index]方式,访问到字符串中的字符。可以访问,不可以修改。
s := "Hank"
fmt.Printf("%c", s[2])
// 返回 n
unicode/utf8 包
多字节字符的处理,请参考 unicode/utf8 包的相关说明。
例如:
import "unicode/utf8"
utf8.RuneCountInString("小韩说课")
// 返回 4
len(),字符串占用的字节数
utf-8 是变长字符集,英文标点占用1个字节,中文占用3个字节。
len("Hank康")
// 返回 7
+,字符串连接"
"Hello" + " " + "Hank"
==, >, <
字符串比较,比较机制是字符的对称比较。
"abc" > "bbcd"
// 结果为false
strings.Compare(a, b string) int
字符串比较,比较机制是字符的对称比较。返回值为:
0,表示a == b
-1,表示a < b
1,表示a > b
strings.Compare("abc", "abcd")
// 返回 1
strings.Contains(s, substr string) bool
检测字符串 substr 是否在 s 中。
strings.Contains("foobar", "foo")
// 返回 true
strings.Contains("fobar", "foo")
// 返回 false
strings.ContainsAny(s, chars string) bool
检测字符串 chars 的中任意字符是否出现在 s 中。
fmt.Println(strings.ContainsAny("Hank", "kang"))
// 返回 true
fmt.Println(strings.ContainsAny("Hank", "go"))
// 返回 false
strings.ContainsRune(s string, r rune) bool









