You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Go项目推至GitHub的最佳实践及第三方依赖管理疑问求助

从Node转Go:理清依赖管理与项目结构的困惑

嘿,我完全懂你从Node转到Go时的这种困惑——毕竟两者的依赖管理和项目结构思路确实不一样,我来一步步帮你理清楚:

首先,跳出老的GOPATH思维!

你现在的目录结构是Go早期的GOPATH模式,但自从Go 1.11推出Go Modules之后,这种模式已经不是推荐的最佳实践了,这也是你困惑的核心原因之一。

关于golang.org/x/net这类第三方依赖的处理

类比你熟悉的Node.js:

  • Go里的go.mod文件就对应Node的package.json,用来记录项目的依赖包及其版本;go.sum则对应package-lock.json,用来锁定依赖的精确哈希值,保证不同环境下依赖的一致性。
  • 你不需要手动执行类似go import "net/http"的命令(其实这个命令根本不存在😅),只需要在你的代码里正常写import "golang.org/x/net/...",然后执行go build或者go run,Go就会自动下载这些依赖到本地缓存(类似Node的node_modules,但Go的缓存是全局共享的,不是每个项目单独存储),同时自动更新go.modgo.sum文件。

生产服务器上的操作

和Node的npm install类似,在生产服务器上你只需要:

  1. 克隆你的GitHub仓库(仓库里要包含go.modgo.sum以及所有项目代码);
  2. 执行go build,Go会自动根据go.mod里的配置下载所需的所有依赖,然后编译生成可执行二进制文件;
    • 如果你想提前下载依赖(比如避免编译时网络问题),可以先执行go mod download,这就完全等效于npm install

关于GitHub推送的最佳实践

之前说“仅将/src目录推至GitHub”是GOPATH时代的做法,在Go Modules时代完全不需要这么做!你只需要推送你的项目本身的所有文件

  • 比如你的travel/目录下的main.goconfig/server/routes/,还有生成的go.modgo.sum,这些才是需要推送到GitHub的内容。
  • pkg/golang.org/这些都是依赖的缓存或者编译产物,不需要推送到仓库,就像Node不会把node_modules推送到GitHub一样。

给你的具体操作建议

  1. 进入你的项目根目录(也就是gocode/src/github.com/travel/);
  2. 执行go mod init github.com/your-github-username/travel(替换成你实际的GitHub仓库地址),这会生成go.mod文件;
  3. 正常编写代码,引入需要的依赖包;
  4. 执行go build测试本地编译,此时Go会自动下载依赖并更新go.modgo.sum
  5. travel/目录下的所有文件(除了可能的本地编译产物)推送到GitHub即可。

这样不管是在本地还是生产服务器上,都能轻松管理依赖,和你熟悉的Node.js依赖管理逻辑就很相似啦!

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

火山引擎 最新活动