go mod的使用
在使用golang进行项目开发过程中,经常会使用go module来进行依赖包的管理。本章讲述一下go module的使用。
1. 解决golang.org不能访问
在国内golang.org被屏蔽了,直接访问不了,我们采用如下办法解决:在http://ping.eu/ping/上ping一下golang.org,获取到IP如下图所示:

然后,在C:\Windows\System32\drivers\etc\hosts中,添加ip和golang.org的对应关系,添加如下一行:
# lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost #140.82.113.4 github.com #140.82.113.4 www.github.com #199.232.69.194 github.global.ssl.fastly.net #199.232.69.194 github.com.global.ssl.fastly.net #199.232.69.194 www.github.global.ssl.fastly.net #185.199.108.153 assets-cdn.github.com #185.199.109.153 assets-cdn.github.com #185.199.110.153 assets-cdn.github.com #185.199.111.153 assets-cdn.github.com #142.250.74.113 blog.golang.org 142.250.74.113 golang.org #216.239.38.21 go.dev #142.250.74.19 pkg.go.dev #142.250.74.113 play.golang.org
然后启动windows命令行,执行:
# ipconfig/flushdns
之后重新启动下浏览器,就可访问golang.org了。
2. 如何在go.mod中指定使用特定版本的library
如下是来自Deepseek关于“go.mod 如何查看library 有哪些版本,然后指定使用特定的版本”的回答:
在 Go 的模块系统(Go Modules)中,可以通过 go.mod 文件明确指定依赖库的版本。以下是详细的操作方法和规则。
2.1 基本语法
在 go.mod 文件中,每个依赖项的格式为:
module [your-module-name]
go [go-version]
require (
    [module-path] [version]
)
示例如下:
module example.com/myapp
go 1.21
require (
    github.com/gin-gonic/gin v1.9.1
    github.com/stretchr/testify v1.8.4 // indirect
)
2.2 指定依赖版本的几种方式
- 
    直接指定语义化版本(SemVer) - 
        格式: vX.Y.Z(如 v1.2.3) 
- 
        示例 require github.com/gin-gonic/gin v1.9.1
 
- 
        
- 
    指定分支或提交哈希 - 
        格式: [module-path]@[branch-name]或[module-path]@[commit-hash]
- 
        示例 require github.com/gin-gonic/gin@master // 使用分支 require github.com/gin-gonic/gin@daa7c04131f5 // 使用提交哈希
 
- 
        
- 
    伪版本(Pseudo-Version) 当依赖库没有正式的版本标签时,Go 会自动生成伪版本,格式为: vX.Y.Z-yyyymmddhhmmss-abcdefabcdef示例: require golang.org/x/text v0.0.0-20191109021931-daa7c04131f5请注意上面格式: - yyyymmddhhmmss: 年月日时分秒的字符串表示,长度12字节。 为Git 提交的时间(UTC 时间), 可以使用- GIT_LOG_DATE=iso8601-strict git log来查看
- abcdefabcdef: 为commit hash,取前12字节
 
- 
    使用 latest 或 upgrade 关键字 - 
        latest:拉取最新版本(不推荐,可能导致不稳定) 
- 
        upgrade:允许升级到更高版本(需配合 go get 命令) 
- 
        示例 go get -u github.com/gin-gonic/gin@latest
 
- 
        
2.3 如何查看一个library有哪些版本
- 
    使用go list -m -versions命令查看 使用 go list -m -versions命令列出某个库的所有已发布版本:go list -m -versions github.com/gin-gonic/gin示例输出如下: github.com/gin-gonic/gin v1.1.1 v1.1.2 v1.1.3 v1.1.4 v1.3.0 v1.4.0 ... v1.9.1说明: - 此命令会列出该库的所有语义化版本(SemVer)标签
- 如果库没有版本标签(如仅通过 master 分支开发),可能需要查看分支或提交哈希
 
- 
    查看分支或提交哈希(无版本标签时) 如果库没有正式版本标签,可以通过以下方式获取最新代码: 1.1 查看分支列表(需克隆仓库) # git clone https://github.com/gin-gonic/gin # cd gin # git branch -a1.2 查看tags列表 # git tag # git checkout tags/aaa注: 不在go.mod中使用此方式来指定library 1.3 查看提交历史 # git log --oneline
[参看]

