字符串
字符串
说明
说明
字符串在go语言中以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64等)一样
字符串转义符
| 转义符 | 说明 |
|---|---|
\r | 回车符(返回首行) |
\n | 换行符(直接跳到下一行的同列位置) |
\t | 制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
代码示例
package main
import "fmt"
func main() {
fmt.Println("str := \"c:\\Go\\bin\\go.ext\"")
}
输出
str := "c:\Go\bin\go.ext"
定义字符串
定义单行
str := "hello world"
ch := "我尼玛?"
定义多行
str := ` 第一行
第二行
第三行
\r\n
`
输出
说明
两个反引号间的字符串将被原样赋值到 str 变量中,在这种方式下,反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出
第一行
第二行
第三行
\r\n
字符
字符串中的每一个元素叫做字符,go语言的字符有以下两种
-
uint8类型,也叫byte型,代表了ASCII码的一个字符 -
rune类型,代表一个utf-8字符,当需要处理中文或其他符合字符时,则需要用到rune类型,rune类型实际是一个int32
说明
使用 fmt.Printf 中的 %T 可以输出变量的实际类型,使用这个方法可以查看 byte 和 rune 的本来类型
%d 是输出字符的整数值(十进制格式)
%T 是输出字符的类型
代码示例
package main
import "fmt"
func main() {
var a byte = 'a'
fmt.Printf("%d %T\n", a, a)
var b rune = '我'
fmt.Printf("%d %T\n", b, b)
}
输出
97 uint8
25105 int32
字符串应用
计算字符串长度
说明
go语言的内建函数 len() ,可以用来获取切片、字符串、通道等的长度
package main
import "fmt"
func main() {
tip1 := "are you ok"
fmt.Println(len(tip1))
tip2 := "尼玛"
fmt.Println(len(tip2))
}
输出
说明
len() 函数的返回值的类型为 int ,表示字符串的 ASCII 字符个数或字节长度
go语言的字符串都以 UTF-8 格式保存,每个中文占用3个字节,因此使用 len() 函数获得的2个中文文字对应的是6个字节
10
6
如果希望按照习惯上的字符个数来计算,就需要使用go语言中 UTF-8 包提供的 RunneCountInString() 函数,统计 Uncode 字符数量
fmt.Println(utf8.RuneCountInString("我尼玛"))
输出
3
ASCII 和 Unicode 对比
| 特性 | ASCII | Unicode |
|---|---|---|
| 定义 | 美国标准信息交换码 (American Standard Code for Information Interchange) | 通用字符集,用于表示全球多语言字符的标准 |
| 字符范围 | 128 个字符(扩展版为 256 个) | 超过 144,000 个字符,覆盖多种语言和符号 |
| 编码长度 | 每个字符占 7 或 8 位 (1 字节) | 可变长度:常见 UTF-8 (1-4 字节)、UTF-16 (2 或 4 字节) |
| 覆盖范围 | 英文字母、数字、基本标点符号、控制字符 | 包括几乎所有语言的文字、符号、表情符号等 |
| 灵活性 | 固定长度,支持有限的字符集 | 支持广泛字符集,适合全球化应用 |
| 向下兼容性 | 是 Unicode 的子集,前 128 个字符完全兼容 | 向下兼容 ASCII(在编码方式上保留 ASCII 字符的原始值) |
| 使用场景 | 早期计算机和通信系统 | 现代计算机系统,尤其是需要多语言支持的场景 |
遍历字符串
遍历每一个 ASCII 字符
遍历 ASCII 字符使用for的数值循环进行遍历,直接取每个字符串的下标获取 ASCII 字符
package main
import "fmt"
func main() {
theme := "厚礼蟹 go"
for i := 0; i < len(theme); i++ {
fmt.Printf("ascii: %c %d\n", theme[i], theme[i])
}
}
输出
说明
由于没有使用 Unicode ,汉字被显示为乱码
ascii: å 229
ascii: � 142
ascii: � 154
ascii: ç 231
ascii: ¤ 164
ascii: ¼ 188
ascii: è 232
ascii: � 159
ascii: ¹ 185
ascii: 32
ascii: g 103
ascii: o 111