《Go圣经》章三:基本数据

  1. 计算机的底层是位(bit),而实际操作是基于大小固定的单元中的数值,称为字(word),可以解释为整数,浮点数,位集(bitset)或内存地址等。
  2. go四大类数据类型:
    • 基础类型
      • 数字
      • 字符串
      • 布尔型
    • 聚合类型
      • 数组
      • 结构体
    • 引用类型
      • 指针
      • 切片
      • map
      • 函数
      • 通道
    • 接口类型
类别 表示
有符号整数 int8/int16/int32/int64
无符号整数 uint8/uint16/uint32/uint64
原生整数 int/uint 与系统位数一致
rune 同int32 指明unicode码点
byte 同int8 强调原始数据而非量值
uintptr 无符号整数,大小不明,存放指针
float32 精度大约6位
float64 精度大约15位
complex64 复数,由float32构成
complex128 复数,由float64构成
bool 无法隐式转换为数值,反之也不行
  1. 字符串字面量

    • s[i, j]生成子串
    • 使用utf8编码,非ascii字符码点需要两个或多个字节
    • 可以用加号连接字串
    • 字串间可以比较
    • 字串可以赋值,不可改变,这意味着两个字串可以共用一个底层
    • ``原样字串,忽略换行
  2. 编码

    1. ASCII码:7位表示128个字符

    2. Unicode码:包含世界上所有字符,各自有一个叫Unicode码点的标准数字,go中称为文字符号(rune),大约有十二万字符,int16存不下,int32刚好可以,也就是rune。我们可以让每个字符都占32位,即utf32,但是太浪费了,所以采用了utf8编码。

    3. UTF-8编码:每个字符用1-4个字节表示,go中允许如下表示。

      \xhh h式十六进制数字,大小写皆可,且必须是两位

      \ooo 八进制,必须使用三位数字,且不超过\377

      \uhhh 16位码点值

      \Uhhhhhhhh 32位码点值

      当[]rune作用于utf8编码的字串时,返回unicode码点序列

  3. 字符串和字节切片

    1. strings包:搜索,替换,比较,修整,切分,连接字符串

    2. bytes包:类似strings用于操作[]byte类型

    3. strconv包:布尔值,整数,浮点数与字符串间的转换,还有为字符串添加/去除引号的函数

    4. unicode包:有判别文字符号值特性的函数,如IsDigit,IsLetter,IsUpper,IsLower

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

      s := "abc"
      b := []byte(s)
      s2 := string(b)
      
  4. 字符串和数字的相互转换

    1. 整数转字符串

      1. fmt.Sprintf

      2. strconv.Itoa

      x := 123
      y := fmt.Sprintf("%d",x)
      fmt.Println(y,strconv.Itoa(x)) //“123 132”

      1. 按不同进位制格式化数字
        fmt.Println(strconv.FormatInt(int64(x),2)) //"1111011"

        fmt.Printf里的%b,%d,%o,%x往往比Format方便

        s := fmt.Sprintf("x=%b",x) //"x=1111011"

    2. 字符串转整数

      x,err := strconv.Atoi("123")	//x是整形
      y,err := strconv.ParseInt("123",10,64)	//十进制,int64类型
      
  5. 常量

    1. 常量是一种表达式,在编译阶段就计算出表达式的值,常量本质上都属于基本类型,对于常量操作数,所有数学运算,逻辑运算和比较运算后的结果依然是常量

    2. const (
      	a = 1
      	b
      	c = 2
      	d
      )			//a=1 b=1 c=2 d=2
      
    3. const (
          _ = 1 << (10 * iota)
          KiB	//1024
          MiB	//1048576
      )
      
    4. 无类型常量精度可以很高,常量声明(包扩短变量声明)都是有类型的,const a = 1024这样没有
      欢迎访问我的主页

上一篇:strconv


下一篇:每周一道算法题002:四则运算