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杂谈/