Go语言--语法基础4--基本数据类型--字符串类型
在 Go 语言中,字符串也是一种基本类型。相比之下, C/C++ 语言中并不存在原
生的字符串类型,
通常使用字符数组来表示,并以字符指针来传递。
Go 语言中字符串的声明和初始化非常简单,举例如下:
var str string // 声明一个字符串变量
str = "Hello world" // 字符串赋值
ch := str[0] // 取字符串的第一个字符
fmt.Printf("The length of \"%s\" is %d \n", str, len(str))
fmt.Printf("The first character of \"%s\" is %c.\n", str, ch)
输出结果为:
The length of "Hello world" is 11
The first character of "Hello world" is H.
字符串的内容可以用类似于数组下标的方式获取,但与数组不同,字符串的内
容不能在初始
化后被修改,比如以下的例子:
str := "Hello world" // 字符串也支持声明时进行初始化的做法
str[0] = 'X' // 编译错误
编译器会报类似如下的错误:
cannot assign to str[0]
1 、 字符串操作
平时常用的字符串操作如表所示,更多的字符串操作,请参考标准库 strings 包。

2 、 字符串遍历
Go 语言支持两种方式遍历字符串。一种是以字节 数组的方式遍历:
str := "Hello, 世界 "
n := len(str)
for i := 0; i < n; i++ {
ch := str[i] // 依据下标取字符串中的字符,类型为 byte
fmt.Println(i, ch)
}
这个例子的输出结果为:
0 72
1 101
2 108
3 108
4 111
5 44
6 32
7 228
8 184
9 150
10 231
11 149
12 140
可以看出,这个字符串长度为 13 。尽管从直观上来说,这个字符串应该只有 9 个
字符。
这是因为每个中文字符在 UTF-8 中占 3 个字节,而不是 1 个字节。
另一种是以 Unicode 字符遍历:
str := "Hello, 世界 "
for i, ch := range str {
fmt.Println(i, ch)//ch 的类型为 rune
}
输出结果为:
0 72
1 101
2 108
3 108
4 111
5 44
6 32
7 19990
10 30028
以 Unicode 字符方式遍历时,
每个字符的类型是 rune (早期的 Go 语言用 int 类型表示 Unicode 字符),而不是
byte 。
3 、字符串的分割
strings.Split 支持单个分隔符
strings.FieldsFunc 支持多个分隔符
返回值:均为切片
func main() {
srcStr1 := "abc:def:k:g"
desStr1 := strings.Split(srcStr1, ":")
fmt.Printf("ret:%s\n", desStr1)
srcStr2 := "a b c,def,k,g"
desStr2 := strings.FieldsFunc(srcStr2, splitFunc)
fmt.Printf("ret:%s\n", desStr2)
}
func splitFunc(r rune) bool {
return r == ' ' || r == ','
}
4 、字符串的使用细节:
( 1 ) go 语言的字符串的字节使用 utf-8 编码;
( 2 )与 python 一样,一旦字符串赋值了,就不能被更改;
( 3 )两种表示形式
1 )双引号,会识别转义字符;
2 )反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防
止攻击,输出源代码等
package main
import (
"fmt"
)
func main() {
var c = "abc\nabc"
var d = `abc\nabc`
fmt.Println(c)
fmt.Println(d)
}