You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go 1.20.3中go get与go install的差异及相关安装问题咨询

问题解答

1. go install未生成simpleGitHub二进制文件的原因

你的go install github.com/mactsouk/go/simpleGitHub命令未生成二进制文件,核心原因有两个:

  • 目标子包不是可执行包:simpleGitHub目录下没有包含main函数的.go文件(即不是package main)。Go的go install仅在编译main包时才会生成可执行二进制文件并输出到$HOME/go/bin目录;如果是库包(package XXX非main),只会将编译后的包存入模块缓存(即你看到的$Home/go/pkg/mod下的目录),不会生成bin文件。
  • 未指定版本标签(模块模式要求):在Go 1.16+的模块模式下,直接使用go install <包路径>需要明确指定版本(比如@latest、@v1.0.0),否则可能因版本解析问题导致未正确编译。你可以尝试执行go install github.com/mactsouk/go/simpleGitHub@latest再检查结果。

2. go get与go install的核心差异

  • 功能定位不同:
    • go get:专注于下载、更新依赖模块,会自动修改当前项目的go.mod和go.sum文件,将依赖添加到项目的依赖声明中;可用于更新已有依赖的版本,或拉取新的依赖模块。
    • go install:专注于编译并安装,针对main包会生成可执行二进制文件到$GOPATH/bin或$GOBIN目录;针对库包则仅将编译后的包存入模块缓存,不会修改当前项目的go.mod(除非需要下载缺失的依赖)。
  • 执行结果不同:
    • go get完成后,依赖会被添加到项目的依赖列表,模块缓存中会有对应的包,但不会生成可执行文件(除非目标是main包且隐式编译)。
    • go install针对main包会生成二进制文件,针对库包仅完成编译缓存,不修改项目依赖声明(除非依赖缺失需要下载)。

3. go.sum文件出现两条相同模块记录的原因

go.sum中的两条记录分别对应模块的不同校验维度:

  • 第一条github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd h1:...:是整个模块的校验和,用于验证下载的模块所有文件的完整性。
  • 第二条github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd/go.mod h1:...:是模块中go.mod文件的单独校验和,用于验证模块依赖声明文件的完整性。

Go需要这两个校验和来双重确保模块的真实性和完整性,避免下载的模块或其依赖声明被篡改,因此会同时保留这两条记录。

内容的提问来源于stack exchange,提问作者DDave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:07:31