本节核心内容
- 介绍 如何Go语言中的字符串类型
- 介绍 Go语言中字符串转义符有哪些
- 介绍 字符串是基于什么编码实现的
- 介绍 如何定义多行字符串变量
本小节视频教程和代码:百度网盘
可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。
Go语言字符串
字符串在 Go 语言中以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。
字符串的值为双引号中的内容,可以在 Go 语言的源码中直接添加非 ASCII 码字符,代码如下:
str := "hello world"
ch := "中文"
字符串转义符
Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示
Go语言的常见转义符:
转移符 | 含 义 |
---|---|
\r | 回车符(返回行首) |
\n | 换行符(直接跳到下一行的同列位置) |
\t | 制表符 |
\' | 单引号 |
" | 双引号 |
\ | 反斜杠 |
在 Go 语言源码中使用转义符代码如下:
package main
import (
"fmt"
)
func main() {
fmt.Println("str := \"c:\\Go\\bin\\go.exe\"")
}
代码运行结果:
str := "c:\Go\bin\go.exe"
这段代码中将双引号和反斜杠“\”进行转义。
字符串实现基于 UTF-8 编码
Go 语言里的字符串的内部实现使用 UTF-8 编码。通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问。当然,Go 语言也支持按传统的 ASCII 码方式进行逐字符访问。
定义多行字符串
在源码中,将字符串的值以双引号书写的方式是字符串的常见表达方式,被称为字符串字面量(string literal)。这种双引号字面量不能跨行。如果需要在源码中嵌入一个多行字符串时,就必须使用`
字符,代码如下:
const str = ` 第一行
第二行
第三行
\r\n
`
fmt.Println(str)
代码运行结果:
第一行
第二行
第三行
\r\n
`
叫反引号,就是键盘上 1 键左边的键,两个反引号间的字符串将被原样赋值到 str 变量中。
在这种方式下,反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。
多行字符串一般用于内嵌源码和内嵌数据等,代码如下:
const codeTemplate = `// Generated by github.com/davyxu/cellnet/
protoc-gen-msg
// DO NOT EDIT!{{range .Protos}}
// Source: {{.Name}}{{end}}
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 源码格式。
在`
间的所有代码均不会被编译器识别,而只是作为字符串的一部分。
小结
本小节主要讲解了Go语言中的字符串类型,包括字符串是由什么编码实现的、Go语言中字符串的转译符有哪些、如何定义多个字符串变量。
请发表评论