golang杂谈

Golang

名词说明

变量

  • GOROOT:go sdk的下载存放位置,标准库包的源码在$GOROOT/src
  • GOPATH:第三方依赖的下载存放位置,第三方依赖包的源码在$GOPATH/src

层级

  • package:一个包含了多个 .go 文件的目录。
    • 即当前目录下(不包子目录下的文件)的所有文件的包名必须一致.
    • 目录名推荐和package一致,但不强制要求一致。
    • 每一段 Go 程序都 必须 属于一个package包。
  • module:一个module管理多个package,统一用一个.mod文件控制版本。
    • 一个module只由一个.mod文件管理依赖,且.mod文件定义了该模块的名字。
    • 在同一个module下,import子package时,需要用到该module名字作为前缀。
  • Project:项目,通常是一个项目一个module,但也有例外,一个项目多个module,

GOPATH 与 GOMODULE

go程序的初始化执行顺序

从main包开始,递归地展开所有依赖的包并初始化。

go run *.go
├── 执行 Main 包
├── 初始化Mian包所有引用的包
|  ├── 初始化引用包的引用包 (recursive definition, 最后导入的包会最先初始化)
|  ├── 初始化全局变量
|  └── 同一个package如果有多个文件,则以文件名的顺序调用各个文件的init 函数()
└── 初始化 Main 包
   ├── 初始化全局变量
   └── 以文件名的顺序调用main包中的init 函数
   └── main函数

常用命令

  • go mod init:初始化module,通常就是创建一个.mod文件
  • go mody tidy:清楚.mod文件中未在使用的第三方依赖
  • go mod vendor:将.mod文件中依赖项下载到当前目录。
  • go mod download:下载当前.mod文件中所有的依赖项
  • go get:只负责下载、不负责编译、安装。
  • go install:go install 负责下载(但不更新go.mod)、编译、安装。

常见疑惑


golang杂谈
https://messenger1th.github.io/2024/07/24/Golang/golang杂谈/
作者
Epoch
发布于
2024年7月24日
许可协议