Go 语言的 string
类型是一个用于表示文本的基本数据类型。Go 中的字符串是不可变的,也就是说,一旦创建就不能被修改。字符串在 Go 中使用 UTF-8 编码,这使得它们能够很好地处理多种语言的字符集。
声明和初始化
你可以通过多种方式来声明和初始化字符串:
var s1 string // 声明但未初始化,默认值为空字符串 ""
var s2 string = "Hello" // 声明并初始化
s3 := "World" // 简短声明并初始化
字符串连接
可以使用加号(+
)操作符连接两个字符串:
greeting := s2 + ", " + s3 + "!"
fmt.Println(greeting) // 输出: Hello, World!
多行字符串
使用反引号(`)来声明多行字符串,反引号中的字符串不会进行转义,原样保留所有内容,包括换行符:
multiLine := `This is a
multi-line
string.`
fmt.Println(multiLine)
字符串长度
使用 len
函数可以获取字符串的长度,长度指的是字节数而不是字符数:
length := len(greeting)
fmt.Println("Length of greeting:", length) // 输出: Length of greeting: 13
字符串索引和切片
可以通过索引访问字符串中的字节(注意是字节而不是字符):
char := greeting[0]
fmt.Println("First character:", string(char)) // 输出: First character: H
可以通过切片操作符获取字符串的子串:
substring := greeting[0:5]
fmt.Println("Substring:", substring) // 输出: Substring: Hello
字符串比较
可以使用比较操作符(==
, !=
, <
, >
, <=
, >=
)来比较字符串:
if s2 == "Hello" {
fmt.Println("s2 is Hello")
}
字符串常用函数
Go 提供了很多字符串处理函数,这些函数在 strings
包中:
import (
"fmt"
"strings"
)
func main() {
s := "Hello, World!"
fmt.Println(strings.ToUpper(s)) // 转为大写: HELLO, WORLD!
fmt.Println(strings.ToLower(s)) // 转为小写: hello, world!
fmt.Println(strings.Contains(s, "Wo")) // 是否包含: true
fmt.Println(strings.ReplaceAll(s, "World", "Go")) // 替换: Hello, Go!
fmt.Println(strings.Split(s, ", ")) // 分割: [Hello World!]
}
遍历字符串
可以使用 range
关键字遍历字符串中的字符:
for i, c := range s {
fmt.Printf("Index: %d, Character: %c\n", i, c)
}
注意事项
- 不可变性:字符串一旦创建不可修改。如果需要大量拼接字符串,建议使用
strings.Builder
或bytes.Buffer
以提高性能。 - UTF-8 编码:Go 的字符串是 UTF-8 编码的,这意味着一个字符可能占用多个字节。遍历字符串时要小心处理多字节字符。
示例代码
下面是一个完整的示例代码,展示了字符串的声明、初始化、操作和遍历:
package main
import (
"fmt"
"strings"
)
func main() {
var s1 string
s2 := "Hello"
s3 := "World"
greeting := s2 + ", " + s3 + "!"
fmt.Println(greeting) // 输出: Hello, World!
multiLine := `This is a
multi-line
string.`
fmt.Println(multiLine)
fmt.Println("Length of greeting:", len(greeting)) // 输出: Length of greeting: 13
fmt.Println("First character:", string(greeting[0])) // 输出: First character: H
substring := greeting[0:5]
fmt.Println("Substring:", substring) // 输出: Substring: Hello
if s2 == "Hello" {
fmt.Println("s2 is Hello")
}
fmt.Println(strings.ToUpper(greeting)) // 输出: HELLO, WORLD!
fmt.Println(strings.ToLower(greeting)) // 输出: hello, world!
fmt.Println(strings.Contains(greeting, "Wo")) // 输出: true
fmt.Println(strings.ReplaceAll(greeting, "World", "Go")) // 输出: Hello, Go!
fmt.Println(strings.Split(greeting, ", ")) // 输出: [Hello World!]
for i, c := range greeting {
fmt.Printf("Index: %d, Character: %c\n", i, c)
}
}
这个示例代码展示了如何声明和初始化字符串,进行字符串操作,以及遍历字符串中的字符。通过这些操作,可以全面了解 Go 语言中 string
类型的使用。