golang"字符"和"字符串"简明指南

120 阅读1分钟

本文简明地梳理golang中和字符相关的最常用概念,给萌新gopher树立正确的观念.

byte 字节

  • byte是一个字节,是uint8的别名
  • 1Byte=8bit,是信息表示的最小单位.

Unicode编码

  • golang采用的是unicode编码
  • unicode是变长编码,长度范围是1-4字节
  • 单字节编码的就是ascII的255个字符
  • 汉字3字节

string 字符串

  • string底层是一个const的[]byte.
  • 对于string str,
    • str[i]取出的是第i个byte,
    • str[i:j]取出的是第i到j-1个字节形成的string,

rune 码点

  • rune是int32的别名,因为rune最多4byte=32bit
  • rune是一个unicode的码点,也可以理解为golang的字符类型
  • 对于数字字母而言对应的byte和rune值一样,因为是单字节编码的
  • 对于汉字就不一样了,一个汉字可由1个rune,或者3个byte表示

字符串操作 和 string,[]byte,[]rune

  • string是不可改变的,如果要做字符串操作
    • 当字符串只有数字字母,可以转化成[]byte或者[]rune
    • 当有汉字等多字节编码的就必须转化成[]rune
  • 当然,最通用的做法就是转化成[]rune

字符串/字符操作相关的包

  • strings
    • 顾名思义,和字符串相关
    • 例如trim,split,hasprefix...
  • unicode
    • 和码点相关的操作
    • 之前解释过unicode码点就是golang的字符
    • 例如 isletter,isdigit...