扫码一下
查看教程更方便
本章节对Go语言中的字符串进行一个详解。
在 Go 编程中广泛使用的字符串是只读的字节片。在 Go 编程语言中,字符串本质上是切片(slice)。Go 平台提供了多种多样的库来操作字符串。
创建字符串的最简单的方法就是给变量直接赋值一个字符串
var greeting = "Hello World!"
下面让我们看一个简单的示例
package main
import (
"fmt"
)
func main() {
greeting := "Hello World!"
fmt.Println(name)
}
上述代码编译执行结果如下
Hello World!
每当在代码中遇到字符串文字时,编译器都会创建一个字符串对象,在这种情况下,它的值是“Hello World!”。
字符串字面量包含一个有效的 UTF-8 序列,称为符文。字符串包含任意字节。
package main
import "fmt"
func main() {
var greeting = "Hello world!"
fmt.Printf("normal string: ")
fmt.Printf("%s", greeting)
fmt.Printf("\n")
fmt.Printf("hex bytes: ")
for i := 0; i < len(greeting); i++ {
fmt.Printf("%x ", greeting[i])
}
fmt.Printf("\n")
const sampleText = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"
/*q标志转义不可打印字符,使用+标志转义非ascii字符的字符,以使输出明确无误 */
fmt.Printf("quoted string: ")
fmt.Printf("%+q", sampleText)
fmt.Printf("\n")
}
上述代码执行结果如下
normal string: Hello world!
hex bytes: 48 65 6c 6c 6f 20 77 6f 72 6c 64 21
quoted string: "\xbd\xb2=\xbc \u2318"
注意
- 字符串文字是不可变的,因此一旦创建字符串文字就无法更改。
由于字符串是字节的切片,因此可以对字符串的每一个字节进行访问。
package main
import (
"fmt"
)
func printBytes(s string) {
fmt.Printf("Bytes: ")
for i := 0; i < len(s); i++ {
fmt.Printf("%x ", s[i])
}
}
func main() {
greeting := "Hello World!"
fmt.Printf("String: %s\n", greeting)
printBytes(greeting)
}
%s 是打印字符串的格式说明符。len(s) 返回字符串中的字节数,我们使用for 循环以十六进制表示法打印这些字节。%x 是十六进制的格式说明符。
上述代码编译执行结果如下
String: Hello World
Bytes: 48 65 6c 6c 6f 20 57 6f 72 6c 64
让我们稍微修改一下上面的程序来打印字符串的字符。
package main
import (
"fmt"
)
func printBytes(s string) {
fmt.Printf("Bytes: ")
for i := 0; i < len(s); i++ {
fmt.Printf("%x ", s[i])
}
}
func printChars(s string) {
fmt.Printf("Characters: ")
for i := 0; i < len(s); i++ {
fmt.Printf("%c ", s[i])
}
}
func main() {
greeting := "Hello World!"
fmt.Printf("String: %s\n", greeting)
printChars(greeting)
fmt.Printf("\n")
printBytes(greeting)
}
上述代码编译执行结果如下
String: Hello World!
Characters: H e l l o W o r l d !
Bytes: 48 65 6c 6c 6f 20 57 6f 72 6c 64 21
警告
:虽然上面的程序看起来是访问字符串单个字符的合法方式,但这有一个严重的错误。上面的程序没有考虑字符串中一个字符占多字节的情况,例如 中文。这种情况我们会在后面的章节中单独介绍,然后给出解决方案。这里大家也可以自己尝试解决。
len(str) 方法返回字符串文字中包含的字节数。
package main
import "fmt"
func main() {
var greeting = "Hello World!"
fmt.Printf("字符串长度是: ")
fmt.Println(len(greeting))
}
上述代码执行结果如下
字符串长度是:12
Strings 包中有一个用于连接多个字符串的方法 join
strings.Join(sample, " ")
Join 连接数组的元素以创建单个字符串。第二个参数是分隔符,它位于数组元素之间。
让我们看看下面的例子
package main
import ("fmt" "math" )"fmt" "strings")
func main() {
greetings := []string{"Hello","world!"}
fmt.Println(strings.Join(greetings, " "))
}
上述代码编译执行结果如下
Hello World!