Golang语法学习8---字符串

Posted 阿Q看世界

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang语法学习8---字符串相关的知识,希望对你有一定的参考价值。

一个字符串是一个不可改变的字节序列,字符串可以包含任意的数据,但是通常是用来包含可读的文本,字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码表上的字符时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。

UTF-8 是一种被广泛使用的编码格式,是文本文件的标准编码,其中包括 XML 和 JSON 在内也都使用该编码。由于该编码对占用字节长度的不定性,在Go语言中字符串也可能根据需要占用 1 至 4 个字节,这与其它编程语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go语言这样做不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。

字符串是一种值类型,且值不可变,即创建某个文本后将无法再次修改这个文本的内容,更深入地讲,字符串是字节的定长数组。

定义字符串

""
  • \n:换行符

  • \r:回车符

  • \t:tab 键

  • \u 或 \U:Unicode 字符

  • \\:反斜杠自身

package main
import ( "fmt")
func main() { var str = "C语言中文网\nGo语言教程" fmt.Println(str)}



运行结果为:

C语言中文网
Go语言教程

[]
  • 字符串 str 的第 1 个字节:str[0]

  • 第 i 个字节:str[i - 1]

  • 最后 1 个字节:str[len(str)-1]


需要注意的是,这种转换方案只对纯 ASCII 码的字符串有效。

字符串拼接符“+”

两个字符串 s1 和 s2 可以通过 s := s1 + s2 拼接在一起。将 s2 追加到 s1 尾部并生成一个新的字符串 s。

可以通过下面的方式来对代码中多行的字符串进行拼接:

str := "Beginning of the string " +"second part of the string"



提示:因为编译器会在行尾自动补全分号,所以拼接字符串用的加号“+”必须放在第一行末尾。

也可以使用“+=”来对字符串进行拼接:

s := "hel" + "lo,"s += "world!"fmt.Println(s) //输出 “hello, world!”



字符串实现基于 UTF-8 编码

Go语言中字符串的内部实现使用 UTF-8 编码,通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问。当然,Go语言也支持按照传统的 ASCII 码方式逐字符进行访问。

关于字符串的 UTF-8 字符访问的详细方法,后面的章节将会详细介绍。

定义多行字符串

`
const str = `第一行第二行第三行\r\n`fmt.Println(str)



代码运行结果:

第一行
第二行
第三行
\r\n

`
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}}}`


``


由于字符串涉及到的知识面比较多,明天会专门做一篇关于字符串类型的知识点,有以下内容:

  • 计算字符串长度——len()和RuneCountInString()

  • 遍历字符串——获取每一个字符串元素

  • 字符串截取(获取字符串的某一段字符)

  • 修改字符串

  • 字符串拼接(连接)

  • fmt.Sprintf(格式化输出)

敬请期待,不见不散~


以上是关于Golang语法学习8---字符串的主要内容,如果未能解决你的问题,请参考以下文章