一般来说字符串是一串固定长度的字符连接起来的字符序列,但在 Go 中字符串是由字节连接起来的
Go 语言中的字符串是 UTF-8 编码的字节序列,可以包含任意 Unicode 字符
一、string 类型的特点
- string 是 Go 语言中的一种基本数据类型,表示一系列 Unicode 字符的不可变序列,使用双引号 "" 包裹
- string 的默认值是 ""(空字符串)
- string 是不可变的,一旦创建就不能修改,可以通过连接、切片等操作来生成新的字符串
- 字符串连接使用 + 运算符,可以连接多个字符串。如果字符过多可以换行连接,注意 + 需要放在行尾
- 字符不能直接修改,因为字符串是不可变的,如果需要修改字符串中的字符,需要先将字符串转换为
[]rune或[]byte,修改后再转换回 string
二、string 类型表示形式
- 字符串字面量:使用双引号 "" 包裹的字符序列,例如 "Hello, 世界"
- 原始字符串字面量:使用反引号 包裹的字符序列,原样输出其中的内容,不进行转义,例如
Hello\nWorld输出 Hello\nWorld。可以实现防止攻击和保留格式的功能,适合表示多行字符串或包含特殊字符的字符串
三、string 类型的使用示例
package main
import (
"fmt"
)
func main() {
// 1、定义字符串
var str string = "Hello, 世界"
fmt.Println("字符串 str =", str)
// 2、默认值
var defaultStr string
fmt.Println("字符串 defaultStr =", defaultStr) // 输出空字符串
// 3、字符串连接
var str1 string = "Hello"
var str2 string = "World"
var str3 string = str1 + ", " + str2 + "!"
fmt.Println("字符串 str3 =", str3)
// 4、字符不能直接修改
// str3[0] = 'h' // 编译错误:cannot assign to str3[0]
// 5、修改字符串中的字符
var runes []rune = []rune(str3) // 将字符串转换为 []rune
runes[0] = 'h' // 修改第一个字符
str3 = string(runes) // 将 []rune 转换回 string
fmt.Println("修改后的字符串 str3 =", str3)
// 6、原始字符串字面量 和 反引号
var normalStr string = "Hello\nWorld"
var rawStr string = `Hello\nWorld`
fmt.Println("普通字符串 normalStr =", normalStr) // 输出 Hello 换行 World
fmt.Println("原始字符串 rawStr =", rawStr) // 输出 Hello\nWorld
}