字符串

在GO语言中,字符串是不可变的字节序列,只能通过重新赋值改变变量的值。

如下代码:

因为在GO语言中字符串的底层是字节数组,

上述代码字符串中底层字节数组如下:

[230 152 165 230 177 159 232 138 177 230 156 136 229 164 156]

每个字符占3个字节,所以取第一个字符的索引为 [:3]。

因为GO语言的字符串是不可变的,上述代码会触发宕机异常:

cannot assign to str[:3] (value of type string)


字符串字面量

1.字符串字面量

字符串字面量是在双引号之间的字节序列。字符串字面量中出现以下字符会转义。

例如字符串字面量中包含字符\n,则在输出字符串时,并不会打印出\n,而是在这个位 置换行。

具体的转义序列如下:

转移序列含义
\a“警告”或
\b退格符
\f换页符
\n换行符
\r回车符
\t制表符
\v垂直制表符
\'单引号
\"双引号
\\反斜杠

2.原生字符串字面量

原生字符串字面量在反引号之间的字节序列。原生字符串中的转义序列不会生效,所见即所得。并且原生字符串字面量支持多行,会保留换行符,删除回车符,保证在所有平台上保持一致。原生字符串字面量适用与正则、HTML模板、JSON字面量、命令行提示信息、以及多行文本等场景。

符文类型

字符串中的每一个元素称为字符。GO语言中字符有两种:

字节类型(byte),相当于uint8类型,代表一个ASCII字符

符文类型(rune),相当于int32类型,代表一个UTF-8字符

底层结构

字符串是一个结构体,包含一个指向字符串字面量的指针和字符串字面量的字节长度。

结构如图所示

其中长度为字节数组的字节数。


字符串声明与赋值

1.声明

在GO语言中声明变量会根据变量类型赋默认值。例如,字符串的默认值为空字符串

代码如下:

输出:

2.赋值

先声明后赋值

短变量声明


字符串基本使用

1.字符串长度

通过len()方法获取字符串字节数

代码:

2.下标访问操作

获取字符串第一个字符

代码

* fmt.Println() 使用默认的格式将传入的参数写到标准输出

* str[:3] 为区字符串的第一个字符

3.遍历字符串

若字符串中不止有ASCII编码

* 通过range遍历会得到rune类型的字符

* %c输出给定整数的对应字符

4.字符串切割

输出:

通过strings包中的Split方法,传入参数字符串和切割的字符。