前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >夯实基础:Go 语言包依赖管理(二)

夯实基础:Go 语言包依赖管理(二)

作者头像
aoho求索
发布2021-10-14 16:48:50
5730
发布2021-10-14 16:48:50
举报
文章被收录于专栏:aoho求索aoho求索

前文回顾

Go 是一门静态强类型语言,与其他语言一样,Go 语言通过 package 关键字定义一个包。前面一篇文章主要介绍了 Go 语言的包依赖管理。

在同一个包内定义的func、type、变量、常量,在该 package下的所有文件下的代码都可以随意访问,属于包内公开。我们通过 package 关键字定义 main 包,在 Go 中规定主函数 #main 必须位于 main 包下。

Go 的代码复用很大程度依赖于包基础上,而包管理很大程度依赖于 GOPATH。Go 的包管理一直饱受诟病,不过自 1.11 版本发布 Go Modules 以来已经出现很大程度的改善。本文将会具体介绍 GOPATH 和 Module 的相关实践。

GOPATH

GOPATH 工作目录是 Go 项目的开发空间,它是一个目录结构,一般由三个子目录组成:

  • src,包含了组成各种包的源代码,一个目录就是一个包;
  • pkg,包含了编译后的类库;
  • bin,包含了编译后的可执行程序。

而 GOPATH 是 Go 中使用的一个环境变量,它使用绝对路径提供 Go 项目的工作目录。GOPATH 适合处理大量 Go 源码、多个包组合而成的复杂工程。一般建议一个项目使用一个 GOPATH,在编译的过程中就不会编译错误的代码或者版本。

通过 go install 命令,我们可以将 Go 项目代码进行编译,它将项目的编译中间文件放到 GOPATH 的 pkg 目录下,同时固定地将编译结果放在 GOPATH 的 bin 目录下。

在不依赖其他第三方工具的前提下,可以使用 go get 命令远程拉取新的依赖包。go get 借助代码管理工具(Git、SVN 等)引入远程代码或者依赖,并自动完成编译和安装,默认安装在当前工作目录的 GOPATH 下,参数为需要引入的包名。比如我们想引入 Micro-Go-Pracrise 库到当前的 GOPATH 下,可以执行以下命令:

go get github.com/keets2012/Micro-Go-Pracrise
Go Modules

Go Modules 于 1.11 版本初步引入,在 1.2 版本中正式支持,它是 Go 官方提供的包管理解决方法。通过 Go Modules,我们可以不必将项目放置到 GOPATH 位置上。

Go Modules 和传统的 GOPATH 不同,不需要包含固定的三个子目录,一个源代码目录,甚至空目录都可以作为 Module,只要其中包含 go.mod 文件。

我们可以通过以下命令创建一个新的 Module:

go mod init [module name]

比如我们定义一个新的 Module 为 module1,输入以下命令:

go mod init module1

将会在当前目录生成一个 go.mod 文件,内容为:

module module1

go 1.12

Go Modules 会为我们进行包管理,并自动更新 go.mod 文件,如果我们希望引入新的依赖,比如说引入 Micro-Go-Pracrise 库,我们可以在 go.mod 中添加以下代码:

module module1

go 1.12

require github.com/keets2012/Micro-Go-Pracrise v1.2.3

引入 Micro-Go-Pracrise 依赖的 1.2.3 版本,接着我们可以通过执行以下命令,手动更新依赖关系:

go mod tidy

通过 Go Modules 可以很轻易地进行一个包的依赖管理和版本控制,go buildgo install 将自动使用 go.mod 中依赖关系,减少了 GOPATH 管理时的复杂性。

小结

本文主要介绍了 Go 语言的包依赖管理 GOPATH 和 Go Module 。GOPATH 工作目录是 Go 项目的开发空间,它是一个目录结构,一般由三个子目录组成。Go Modules 于 1.11 版本初步引入,在 1.12 版本中正式支持,它是 Go 官方提供的包管理解决方法。通过 Go Modules,我们可以不必将项目放置到 GOPATH 位置上。

下一篇文章将会开始介绍 Go 语言的反射相关内容,这也是用好 Go 语言所必须掌握的知识点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 aoho求索 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前文回顾
    • GOPATH
      • Go Modules
      • 小结
      相关产品与服务
      代码托管
      CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档