Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(“)中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:
s1 := “hello”
s2 := “你好”
字符串转义符
Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。 | 转义符 | 含义 | | —- | —- | | \r | 回车符(返回行首) | | \n | 换行符(直接跳到下一行的同列位置) | | \t | 制表符 | | \‘ | 单引号 | | \“ | 双引号 | | \\ | 反斜杠 |
举个例子,我们要打印一个Windows平台下的一个文件路径:
package mainimport ("fmt")func main() {fmt.Println("str := \"c:\\Code\\lesson1\\go.exe\"")}
多行字符串
Go语言中要定义一个多行字符串时,就必须使用反引号字符:
s1 := 第一行<br />第二行<br />第三行<br />
fmt.Println(s1)
反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。
字符串的常用操作
| 方法 | 介绍 |
|---|---|
| len(str) | 求长度 |
| +或fmt.Sprintf | 拼接字符串 |
| strings.Split | 分割 |
| strings.contains | 判断是否包含 |
| strings.HasPrefix,strings.HasSuffix | 前缀/后缀判断 |
| strings.Index(),strings.LastIndex() | 子串出现的位置 |
| strings.Join(a[]string, sep string) | join操作 |
byte和rune类型
组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:
var a := ‘中’
var b := ‘x’
Go 语言的字符有以下两种:
- uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
- rune类型,代表一个UTF-8字符。
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。
// 遍历字符串package mainimport "fmt"func traversalString() {s :="jmjjxd你好"for i:=0;i <len(s); i++ {fmt.Printf("%v(%c)", s[i], s[i])}fmt.Println()for _, r := range s{fmt.Printf("%v(%c)", r, r)}fmt.Println()}func main() {traversalString()}
输出:
106(j)109(m)106(j)106(j)120(x)100(d)228(ä)189(½)160( )229(å)165(¥)189(½)106(j)109(m)106(j)106(j)120(x)100(d)20320(你)22909(好)
因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。
字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。
