golang基础知识

init函数是什么时候执行的

init函数的作用是

  • 程序执行前包的初始化

init函数执行顺序

  • 同一go文件中可以写多个init函数,按照代码顺序依次执行
  • 同一个package中,按照文件名(ASCII码顺序)顺序执行
  • 不同包且不互相依赖,按照import的顺序执行
  • 不同package中且互相依赖的,最后被依赖的最先被执行

go文件初始化顺序

  1. 引入的包
  2. 当前包中的常量和变量
  3. 当前包的init
  4. main函数

tips

  • 一个包被引用多次,这个包的init函数只会被执行一次
  • 所有的init函数都会在同一个goroutine内执行

如何获取项目的根目录

相对路径=执行命令时所在的路径

  • path,err := filepath.Abs("./")
  • os.Getwd
  • os.Args[0]打包后
  • os.Executable()
  • runtime.Caller(0)
  • 环境变量

格式化输出

https://www.cnblogs.com/HachikoT/p/16974769.html

new和make的区别

  • make不仅会分配内存,还会初始化。new只会分配零值填充
    • make([]int,0) != nil
  • make只适用于slice map channel的数据,new没有限制
  • make 返回原始类型(T),new返回类型的指针(*T)
  • new申请的值都是零值,对创建映射和切片没有意义
  • 创建数组使用字面量比较多
    • arr := [10]int{} (len = 10)

切片和数组

切片和数组的相同点

  • 数组和切片要求全部数据类型都要相同
  • 数组和切片的所有元素都是连续存放在内存中的

数组和切片的零值不同

  • 数组的零值是每个元素类型的零值
  • 切片的零值为nil
  • 指针类型的数组和切片直接使用类型声明之后是nil,不能直接使用
posted @ 2024-02-11 20:21  肆月初陸丶  阅读(16)  评论(0)    收藏  举报