3 24

Go语言学习记录

  1. fmt.Printf 中使用下面的说明符来打印有关变量的相关信息:
    • %+v 打印包括字段在内的实例的完整信息
    • %#v 打印包括字段和限定类型名称在内的实例的完整信息
    • %T 打印某个类型的完整说明
  2. Go 程序的执行(程序启动)顺序如下:
    1.按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程:
    2.如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次。
    3.然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数。
    4.在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序。
  3. 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
  4. 引用类型:指针、slices、maps、channel,引用存储在堆中,以便进行垃圾回收,且比栈拥有更大的内存空间。
  5. 函数 fmt.Sprintffmt.Printf 的作用是完全相同的,不过前者将格式化后的字符串以返回值的形式返回给调用者。
  6. slice内存图
  7. new() 和 make() 的区别
    • new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为*T的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体;它相当于 &T{}。
    • make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:切片、map 和 channel。
    • new 函数分配内存,make 函数初始化;如下图: