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

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

内容简介:当你开始学习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/


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

查看所有标签

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

算法设计与分析

算法设计与分析

王红梅 / 清华大学 / 2006-7 / 23.00元

《算法设计与分析》(普通高校本科计算机专业特色教材精选)将计算机经典问题和算法设计技术很好地结合起来,系统地介绍了算法设计技术及其在经典问题中的应用。全书共12章,第1章介绍了算法的基本概念和算法分析方法,第2章从算法的观点介绍了NP完全理论,第3章~~第11章分别介绍了蛮力法、分治法、减治法、动态规划法、贪心法、回溯法、分支限界法、概率算法和近似算法等算法设计技术,第12章基于图灵机计算模型介绍......一起来看看 《算法设计与分析》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

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

HEX CMYK 互转工具