UTF-8 是一种广泛使用的编码格式,也是 XML、JSON 等文本文件的标准编码。由于编码占用字节长度的不确定性,Go字符串可能根据需要占用1到4个字节。这与C++、Java、Python等其他编程语言不同(Java总是使用2个字节)。 Go 语言不仅减少了内存和硬盘的使用,而且不需要像其他语言一样使用 UTF-8 字符集对文本进行编码和解码。
字符串是值类型,它们的值是不可变的。这意味着文本内容创建后不能再次更改。进一步解释一下,字符串是一个固定长度的字节数组。
定义字符串
双引号""可以用来定义字符串,字符串内部可以使用转义字符来实现换行、缩进等效果。常用的转义字符有:
- \n:换行符
- \r:回车符
- \t:制表键
- \u 或 \U:Unicode 字符
- \\: 反斜杠本身
package main
import (
"fmt"
)
func main() {
var str = "IT基礎\nGoチュートリアル"
fmt.Println(str)
} 操作的结果将是:
IT基礎
Go チュートリアル
常见的比较运算符(==、!=、<、<=、>=、>)通过比较内存中的字节来实现字符串比较,因此比较的结果是字符串是按编码顺序排列的。字符串占用的字节长度可以通过函数len()获得,如len(str)。
可以使用标准索引方法检索字符串的内容(纯字节)。索引写在方括号[ ]中,从0开始计数。
- 字符串 str 的第一个字节:str[0]
- 第 i 个字节:str[i – 1]
- 最后 1 个字节:str[len(str)-1]
请注意,此转换方案仅适用于纯 ASCII 字符串。
注意:获取字符串内某个字节的地址是非法的,例如&str[i]。
字符串连接符“+”
两个字符串 s1 和 s2 可以通过 s := s1 + s2 连接。将 s2 追加到 s1 的末尾以生成新字符串 s。
多行代码中的字符串可以通过以下方式连接:
str := "文字列の先頭" +
"文字列の2番目の部分" 提示:编译器会自动在行尾补全分号,因此用于连接字符串的加号“+”必须放在第一行的末尾。
您还可以使用“+=”连接字符串。
s := "hel" + "lo, "
s += "world!"
fmt.Println(s) // 出力 “hello, world!” 字符串实现基于UTF-8编码
Go 语言对字符串的内部实现使用 UTF-8 编码,并且每个 UTF-8 字符都可以通过 rune 类型轻松访问。当然,Go语言也支持按照传统的ASCII码进行逐字符访问。
下一章提供有关如何访问字符串中的 UTF-8 字符的详细信息。

使用双引号编写字符串是 Go 语言中表示字符串的常用方法。这称为字符串文字。这种类型的双引号文字不能跨越多行。如果您想将其嵌入到源代码中,请将其用于多行。字符串必须使用`反引号。这是代码:
const str = `第一行
第二行
第三行
\r\n
`
fmt.Println(str) 代码运行结果:
第一行
第二行
第三行
\r\n
`是键盘上键 1 左侧的键,两个反引号之间的字符串被分配给 str 变量。
这样,反引号之间的换行符将被视为字符串中的换行符,但转义字符将被忽略,文本将按原样输出。
多行字符串通常用于嵌入源代码和嵌入数据等内容。这是代码:
const codeTemplate = // github.com/skynet/cell/
package {{.PackageName}}
{{if gt .TotalMessages 0}}
import (
"github.com/davyxu/cellnet"
"reflect"
_ "github.com/davyxu/cellnet/codec/pb"
)
{{end}}
func init() {
{{range .Protos}}
// {{.Name}}{{range .Messages}}
cellnet.RegisterMessageMeta("pb","{{.FullName}}", reflect.TypeOf((*{{.Name}})(nil)).Elem(), {{.MsgID}}) {{end}}
{{end}}
}` 这段代码只定义了常量codeTemplate。它的类型是使用`定义的字符串,字符串的内容是一些代码生成中使用的 Go 源代码格式。
`之间的所有代码都不会被编译器识别,仅被识别为字符串的一部分。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

