1、单引号括起来的只能是单个字符,但GO语言是utf8格式的,所以单个字符长度都为4字节,且一个汉字也是单个字符
unsafe.sizeof('c') 结果是4 unsafe.sizeof('我') 结果也是4
单个的字符可以用 单个的 rune 类型表示,rune类型等于于uint32,也就是说存储单个字符的变量,里面实际存储的是该字符的unicode编码
var a='c' fmt.println(a),打印出来的是 99
var a='我' fmt.println(a),打印出来的是 25105
2、字符串是使用双引号括起来,或反单引号括起来,反单引号(`)是主键区左上角那个,在(~)的下面。单引号不行
a="string" b='string'
可使用(\)转义
<span style="font-size:18px;">t1 := "\"hello\"" //内容: "hello"
t2 := `"hello"` //内容:和t1一致
t3 := "\u6B22\u8FCE" //内容:你好</span>
3、字符串支持切片操作,可以看做是一个切片数组,数组下标从0开始
注意:因为对字符串直接使用切片时是通过字节进行索引的,但是非ASCII字符在内存中可能不是由一个字节组成。所以,s:="sdb我d是一re" 这个字符串长度是15,三个汉字占了9个字节,该字符串数组下标为0-14
直接使用下标取字符就可能取半个字符。
如果想对字符串中字符依次访问,可以使用range操作符<span style="font-size:18px;"> var va rune
for _, va = range s {
fmt.Println(string(va))
}</span>
s[n] | 从字符串s中索引位置为n处的原始字节,返回的是rnue型值,可以用 string(s[n])转换回字符串型 |
s[n:m] | 从位置n到位置m-1处取得的字符(字节)串, 返回的是String型值 |
s[n:] | 从位置n到位置len(s)-1处取得的字符(字节)串 |
s[:m] | 从位置0到位置m-1处取得的字符(字节)串 |
len(s) | 字符串s中的字节数 |
len([]rune(s)) | 字符串s中字符的个数,可以使用更快的方法utf8.RuneCountInString() |
[ ]rune(s) | 将字符串s转换为一个unicode值组成的串 |
string(chars) | chars类型是[]rune或者[]int32, 将之转换为字符串 |
[ ]byte(s) | 无副本的将字符串s转换为一个原始的字节的切片数组,不保证转换的字节是合法的UTF-8编码字节 |