字符串


  1. 字符串不可改变

​ s[0]=’L’ 这种操作是不行的

​ 但是可以通过 s += “, right foot”改变

  1. 原生的字符串字面量的书写形式是 一对反引号,而不是双引号。

    原生的字符串字面量可以展开多方,但是回车符会被删除

    适用于HTML模板,JSON字面量,命令行提示信息

    就可以解释JSON结构体的tag字段了。

  2. ASCII 字符集

    为美国人而设计的字符集,包含了英文字母和一些其他字符,用一个字节代表一个字符,第一个数一定为零,其余七位总共有一百二十八个选择

  3. GBK字符集

    中国人加入战场,用两个字节代表一个字符,同时还兼容ASCII字符集,因为它第一个数字是一就代表了GBK字符集,如果第一个字符是0,就代表是ASCII码,也好分辨

  4. Unicode字符集

    囊括了世界上所有文书体系的全部字符

    1. UTF-32的编码方式:用4个字节表示一个字符(不合适),占内存

    2. UTF-8的编码方式:采取可变长变化反感,共分为四个长度区,1,2,3,4字节

      英文,数字字符占一个字节,汉字字符占用三个字节

      一个文字字符符号编码的首字节的高位知名了后面还有多少字节,如果最高位是零,则就只有本身七位,也就是英文数字字符。

      0xxxxxxx 第一个字节改变,后面都是10xxxxxx

      110xxxxx 10xxxxxx

      1110xxxx 10xxxxx 10xxxxx

      11110xxx 10xxxxx 10xxxxx 10xxxxx

      变长编码的字符串无法通过下标直接访问第n个字符

    3. 可以用不同的转义字符来代表同一个字符串值

      “世界”

      “\xe4\b8\x96\e7\x95\8c”

      “\u4e16\u754c”

    4. 码点值小于256的可以写成单个十六进制数转义的形式(因为就占一个字符)

      如果是更高的码点值,就需要加上\u的符号

      // 码点的意思就是 某个字符对应的数字

字符串和切片


字符串和切片可以相互转换

1
2
3
s:= "abc"
b := []byte(s)
s2:= string(b)

[]byte(s)转换操作会分配新的字节数组,拷贝填入s含有的字节,并生成一个slice引用,指向整个数组

string(b)同理,要保证s2的不可变,也会产生一个副本

在这里核心的点是字符串不可改变,但是切片是可以改变的

bytes.buffer还是挺好玩的,缓冲区

字符串和数字


  1. fmt.Sprintf()
  2. strconv.Itoa()
1
2
3
x := 123
y := fmt.Sprintf("%d",x)
fmt.Println(y,strconv.Itoa(x))