go_compiler

Resolving a package to a module

bash 复制代码
When the go command loads a package using a package path, it needs to determine which module provides the package.
If no modules provide the package or if two or more modules provide the package, the go command reports an error.
The -mod=mod flag instructs the go command to attempt to find new modules providing missing packages and to update
go.mod and go.sum.
The go get and go mod tidy commands do this automatically.
#通过GOPROXY中的地址下载module依赖
When the go command looks up a new module for a package path, it checks the GOPROXY environment variable, which is
a comma-separated list of proxy URLs or the keywords direct or off.
A proxy URL indicates the go command should contact a module proxy using the GOPROXY protocol.
direct indicates that the go command should communicate with a version control system.
off indicates that no communication should be attempted.
#寻找可能提供此package的module
For each entry in the GOPROXY list, the go command requests the latest version of each module path that might
provide the package (that is, each prefix of the package path).
For each successfully requested module path, the go command will download the module at the latest version and check
whether the module contains the requested package.
If no modules are found, the go command tries the next entry in the GOPROXY list.
#成功找到
After a suitable module has been found, the go command will add a new requirement with the new module's path
and version to the main module's go.mod file.

go.mod文件

bash 复制代码
require指令
#require module-path module-version
#Declares a module as a dependency of the current module, specifying the minimum version of the module required.
#For each required module version, the go command loads the go.mod file for that version and incorporates the
#requirements from that file.
#indirect表示该module中的package没有被项目直接依赖
#An // indirect comment indicates that no package from the required module is directly imported by any package in
#the main module.

compiler

bash 复制代码
gc是Go compiler,GC是garbage collection
go tool compile -h
-gcflags=-lang=go1.22,会将参数传给go tool compile.

The build flags are shared by the build, clean, get, install, list, run, and test commands:
-x,print the commands.(可以查看go build,run,clean的执行细节)
-asmflags,arguments to pass on each go tool asm invocation.
-gcflags,arguments to pass on each go tool compile invocation.
-ldflags,arguments to pass on each go tool link invocation.
The -asmflags, -gccgoflags, -gcflags, and -ldflags flags accept a space-separated list of arguments to pass to an
underlying tool during the build.

https://go.dev/ref/mod

https://go.dev/doc/modules/gomod-ref

https://pkg.go.dev/cmd/go@go1.22.3

https://cs.opensource.google/go/go/+/refs/tags/go1.22.3:src/cmd/compile/;bpv=0

https://github.com/golang/go/blob/master/src/cmd/compile/README.md

https://www.reddit.com/r/golang/comments/16okuwb/can_you_explain_to_me_what_is_gopath/

https://www.yasint.dev/gopath-goroot

相关推荐
Villiam_AY19 分钟前
使用 chromedp 高效爬取 Bing 搜索结果
后端·爬虫·golang
He19550111 小时前
Go初级之十:错误处理与程序健壮性
开发语言·python·golang
不会吃萝卜的兔子12 小时前
go webrtc - 1 go基本概念
开发语言·golang·webrtc
小红帽2.017 小时前
从零构建一款开源在线客服系统:我的Go语言实战之旅
开发语言·golang·开源
007php00719 小时前
Go语言面试:传值与传引用的区别及选择指南
java·开发语言·后端·算法·面试·golang·xcode
q5673152321 小时前
手把手教你用Go打造带可视化的网络爬虫
开发语言·爬虫·信息可视化·golang
戎码江湖1 天前
使用CI/CD部署后端项目(gin)
ci/cd·golang·gin·后端自动部署项目·自动化部署项目
二哈不在线1 天前
代码随想录二刷之“贪心算法”~GO
算法·贪心算法·golang
君万1 天前
【LeetCode每日一题】94. 二叉树的中序遍历 104. 二叉树的最大深度
算法·leetcode·golang
Craze_rd1 天前
服务 HTTP 转 SRPC 技术方案
网络·网络协议·http·rpc·golang