数据类型

  1. 数值型
    1. 整数类型:int, int8, int16, int32(rune), int64, uint, uint8(byte), uint16, uint32, uint64
      1. 根据硬件的类型,int必是32或64之一,除非手动定义为其它
      2. 一旦定义就不会改变,即使在32位架构上,int64还是int64
    2. 浮点类型:float32, float64
  2. 字符型
    1. 没有专门的字符型(如char),使用byte保存单个字母或字符,此时存储的是utf-8的数字值
  3. 布尔型bool
  4. 字符串string
    1. go中字符串属于基本数据类型,它们由双引号括起;单引号只能括起一个字符
    2. 一旦赋值,就不可以修改
  5. 复数complex128, complex64,写为re+imi,re为实数部分,im为虚数部分,i标记根号-1
  6. 错误error,默认值为nil,当它不为nil时,说明出错
  7. 指针pointer
  8. 数组
    1. 向函数传递数组时,传的是数组的副本,而不是指针
  9. 结构体struct,相当于class
  10. 管道channel
  11. 函数
  12. 切片slice
    1. 可以使用内建函数make创建切片,slice本身不是关键字,可以作为变量名
    2. slice是一个指向array的指针,是引用类型,这意味着当赋值某个slice到另外一个变量,两个引用会指向同一个array
  13. 接口interface
  14. map,相当于集合set

    1. 是引用类型

      数据类型的转换

      不同于java或c,go只能进行显式转换,即它做不到自动转换数据类型,亦即int32与int8不能直接运算

      常量

      只能是数字、字符串或布尔值,可以使用iota生成枚举值,允许直接使用变量等于值(a=5)

      控制结构

  15. 在go中,大括号是必须的,即使语句体中只有一条语句,并且左大括号必须与if在同一行

  16. if和switch支持局部变量的初始化语句,switch中默认包含break
  17. 控制语句结束于break,continue,goto或者return
  18. 鼓励减少else的使用,使用error判断并return来代替
  19. 可以使用标签+break的方式结束指定循环
  20. range返回的值是键值对k和v(如果只想要v,可以将k改为_,表示不使用),如下返回0a,1b,2c,以此循环类推,可以直接对字符串使用,以此更改其中某个字符

    1. list := [] string {"a", "b", "c", "d", "e", "f"}
    2. for k, v := range list {
    3. // 对k和v做想做的事情...
    4. }

    打印

  21. print和println是底层的打印函数,主要用来调试

  22. fmt中的print有各自不同用处
    1. 在使用Printf打印时,一定要确保占位符正确,否则会出现不可预知的bug,如果不用占位符就不要用Printf
    2. Println一般只用来换行