Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(“)中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:
s1 := “hello”
s2 := “你好”

字符串转义符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。 | 转义符 | 含义 | | —- | —- | | \r | 回车符(返回行首) | | \n | 换行符(直接跳到下一行的同列位置) | | \t | 制表符 | | \‘ | 单引号 | | \“ | 双引号 | | \\ | 反斜杠 |

举个例子,我们要打印一个Windows平台下的一个文件路径:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. fmt.Println("str := \"c:\\Code\\lesson1\\go.exe\"")
  7. }

多行字符串

Go语言中要定义一个多行字符串时,就必须使用反引号字符:
s1 := 第一行<br />第二行<br />第三行<br />
fmt.Println(s1)

反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

字符串的常用操作

方法 介绍
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作

byte和rune类型

组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:
var a := ‘中’
var b := ‘x’

Go 语言的字符有以下两种:

  1. uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. rune类型,代表一个UTF-8字符。

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

  1. // 遍历字符串
  2. package main
  3. import "fmt"
  4. func traversalString() {
  5. s :="jmjjxd你好"
  6. for i:=0;i <len(s); i++ {
  7. fmt.Printf("%v(%c)", s[i], s[i])
  8. }
  9. fmt.Println()
  10. for _, r := range s{
  11. fmt.Printf("%v(%c)", r, r)
  12. }
  13. fmt.Println()
  14. }
  15. func main() {
  16. traversalString()
  17. }

输出:

  1. 106(j)109(m)106(j)106(j)120(x)100(d)228(ä)189(½)160( )229(å)165(¥)189(½)
  2. 106(j)109(m)106(j)106(j)120(x)100(d)20320(你)22909(好)

因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。
字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。