扫码一下
查看教程更方便
本章节对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
警告
:虽然上面的程序看起来是访问字符串单个字符的合法方式,但这有一个严重的错误。上面的程序没有考虑字符串中一个字符占多字节的情况,例如 中文。这种情况我们会在后面的章节中单独介绍,然后给出ag捕鱼王app官网的解决方案。这里大家也可以自己尝试解决。
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!