Go v1.11中的Go模块介绍,再见GOPATH!

栏目: Go · 发布时间: 7年前

内容简介:当你开始学习Go时,需要一些时间来了解如何设置你的开发环境。对我来说,理解编译器在搜索依赖项方面是如何工作的有一点学习曲线。在设置开发环境时,必须执行的一个强制性步骤是配置GOPATH环境变量。GOPATH包含以下目录:

当你开始学习 Go 时,需要一些时间来了解如何设置你的开发环境。对我来说,理解编译器在搜索依赖项方面是如何工作的有一点学习曲线。

在设置开发环境时,必须执行的一个强制性步骤是配置GOPATH环境变量。 $GOPATH 是Go编译器在构建Go应用程序时用来搜索依赖项的。 $GOPATH 包含源代码和二进制文件。

GOPATH包含以下目录:

  • $GOPATH/src -包含所有Go源代码和第三方源代码依赖项
  • $GOPATH/pkg -包含包
  • $GOPATH/bin -包含二进制文件

在最新的主要版本 Go v1.11 中,GOPATH不再是强制性的。 Go团队在这个新版本中引入了 模块 。 模块是相关Go包的集合。 这是Go团队在Go中改进包管理的重要一步。

使用当前版本1.11,你现在可以在GOPATH之外构建Go应用程序。在1.11中,当你将源代码放在 $GOPATH 中时,它会忽略模块特性,并使用GOPATH搜索源代码依赖项。但是,如果将源代码放在GOPATH之外,模块支持就会自动启用。这意味着,你现在可以从任意目录构建应用程序!

我创建了一个样例Go模块,你可以用它来学习Go模块的概念。这是源代码的地址: https://github.com/donvito/hellomod 。你可以随意fork,并用于你自己的学习。该模块有3个版本。

Go v1.11中的Go模块介绍,再见GOPATH!

为了演示如何在应用程序中使用Go模块,让我们假设hellomod是应用程序中需要的第三方模块。

让我们创建一个客户端应用程序来使用 hellomod 模块。 如下是我们可以开始的一些代码。 将此代码保存为main.go在你希望的任何目录中。

main.go

package main

import (

"github.com/donvito/hellomod"

)

func main() {

hellomod.SayHello()

}

我们要初始化对模块的支持。确保GOPATH没有被设置,这样我们就可以自动使用Go 1.11中的模块特性。在终端中执行下面的命令。

$ go mod init hello

这将创建一个go.mod文件。除了你刚刚初始化的模块名,这里没有什么可以看到的。go.mod将包含如下内容:

module hello

在执行“go mod init hello”之后,执行如下命令来构建你的应用程序:

$ go build

“go build”的作用是根据import语句解析应用程序的依赖,并添加最新版本的依赖,然后编译应用程序并生成二进制文件。

由于我们最新版本的hellomod是v1.0.1,go.mod现在包含内容如下:

module hello

require github.com/donvito/hellomod v1.0.1

“go build”还会创建一个go.sum文件,其中包含特定模块版本内容的预期加密校验和。 它的定义来自这里。 https://github.com/golang/go/wiki/Modules#releasing-modules-all-versions

github.com/donvito/hellomod v1.0.1 h1:tOU3KDwvrGW7QUHXYQnk6YUD+92aTsRmJItJTD9f4I4=
github.com/donvito/hellomod v1.0.1/go.mod h1:DuOSvrBCwGkjX0WS5ohdpC/q67fS0Mde3LEM+2jeHSw=

以下是我们迄今执行的命令:

Go v1.11中的Go模块介绍,再见GOPATH!

你可以运行由“go build”创建的二进制文件来检查我们是否在使用hellomod的1.0.1版本。

$ ./hello
Hello World v1.0.1!!!

假设你想恢复到hellomod模块的先前版本v1.0.0。 你只需执行以下命令即可。 这将使用以前的版本。

$ go get github.com/donvito/hellomod@v1.0.0
$ go build
$ ./hello
Hello World

作为参考,这是v1.0.0的样子:

hellomod v1.0.0

package hellomod

import (
	"fmt"
)

//SayHello function
func SayHello() {
	fmt.Println("Hello World")
}

要升级主版本,你需要更import语句中的版本。

main.go

package main

import (

"github.com/donvito/hellomod/v2"

)

func main() {

hellomod.SayHello("Melvin")

}

然后构建应用程序并运行二进制文件“hello”。

$ go build
$ ./hello
Hello MelvinHello World v2.0.0!!!

以下是go.mod在执行“go build”后的样子:

module hello

require (
	github.com/donvito/hellomod v1.0.0
	github.com/donvito/hellomod/v2 v2.0.0
)

是的,可以使用同一模块的不同版本。 一下是一个示例,我们可以看到模块的两个不同版本可以独立使用。 你需要为每个版本使用别名以避免冲突。

main.go ( 客户端应用程序使用两个不同版本的hellomod模块 )

package main

import (

	hellomod "github.com/donvito/hellomod"

	hellomodV2 "github.com/donvito/hellomod/v2"

)

func main() {

	hellomod.SayHello()

	hellomodV2.SayHello("Melvin")

}

本文到此结束!希望你能从这篇文章中学到一些东西!: )

原文链接: https://www.melvinvivas.com/go-version-1-11-modules/


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Python

Programming Python

Mark Lutz / O'Reilly Media / 2006-8-30 / USD 59.99

Already the industry standard for Python users, "Programming Python" from O'Reilly just got even better. This third edition has been updated to reflect current best practices and the abundance of chan......一起来看看 《Programming Python》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具