Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go语言包管理模式

Go语言包管理模式示例分析

作者:甜点cc

这篇文章主要为大家介绍了Go语言包管理模式示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go 的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。

GOPATH模式引包(不推荐)

在 1.5 版本之前,所有的依赖包都是存放在 GOPATH 下,没有多版本控制。

go的编译器会在 $GOPATH/src 下面寻找对应的模块,src 下的每一个目录都可以对应一个模块,目录中的目录也可以是一个模块

下面展示如何在入口文件main.go 里引入非标准库model包中的变量

├───main
│       main.go
└───model
        utils.go
package main
import (
    "fmt"
    // 引包
  // 省略GOPATH/src, Go编译的时候会自动在src目录下寻找
    "go_code/pointer/model"
)
func main() {
    fmt.Println(model.Name) // xiao
}

开启GO111MODULE后非module项目产生的问题

GO111MODULE=on,并且已经设置GOPATH的条件下,写的代码在$GOPATH/src下,我想要使用另一个package里面的内容,并且这个package不是标准库,或者说不在GOROOT里(一般我们不会修改GOROOT中的内容),编译会报错,如下👇👇

package go_code/pointer/model is not in GOROOT

解决方法一:

设置GO111MODULE=off

go env -w GO111MODULE=off

设置完之后, go env查看

然后重新编译即可

解决方法二

使用go mod , 请看下文介绍👇

GO MODULE 模式引包(推荐)

go module 介绍

go modules 是 golang 1.11 新加的特性。

go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

GO111MODULE 有三个值:off, on和auto(默认值)。

当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module

利用GO111MODULEGOPROXY,可以直接将Github上的第三方库直接下载到本地使用,不需要使用go get命令。执行 go run 运行时,GOMODULES包管理工具会自动帮我们下载github上面的包

使用 go mod 创建新项目

当开启GO111MODULE的时候,才可以使用go mod

1、初始化项目

mkdir test-mod
cd test-moe
go mod init maze-mod

在项目根目录生成 go.mod 文件

module test-mod
go 1.17
require github.com/astaxie/beego v1.12.1
require (
    golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect
    golang.org/x/text v0.3.0 // indirect
)

注意:

indirect注释的代表间接依赖,没有的代表直接依赖,

前面是版本号+时间戳+hash(如:v0.0.0-20190620200207-3b0461eec859

2、添加依赖

3、查看依赖

4、go.sum文件

用来做包版本管理

go.sum文件与go.mod文件同级。go.sum文件是对导入的依赖包的特定版本的hash校验值,作用就是记录第一次下载的依赖版本号,防止有依赖版本升级带来的不兼容问题。所以,go.modgo.sum文件都需要被加入版本管理中。

总结

包管理模式一直是各个开发语言所面临的棘手问题,比如NPMYarn,设计一种完美的包管理模式还需要不断探索实践。

以上就是Go语言包管理模式示例分析的详细内容,更多关于Go语言包管理模式的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文