内容简介:Golang 配置不是这里要讨论的新话题。但是在Go 1.12发布之后,我认为必须重新定义步骤,因为项目设置变得比以前简单明了。在搜索配置步骤时,除了少数文章之外,大部分内容仍然是分享旧方式,即在1.11版本中,Go引入了名为
Golang 配置不是这里要讨论的新话题。但是在 Go 1.12发布之后,我认为必须重新定义步骤,因为项目设置变得比以前简单明了。
在搜索配置步骤时,除了少数文章之外,大部分内容仍然是分享旧方式,即
通过本文,我们将看到项目设置及其发布如何在Go 1.12版本中进行。
在1.11版本中,Go引入了名为 Go Modules 的内置包管理,它正在开始进行重大改变Go生态系统。它是GOPATH的替代品,集成了版本控制和软件包分发支持。
来自 Go博客 ,
在我们使用GOPATH的八年中,创建了大量的工具,假设Go源代码存储在GOPATH中。
迁移到Go模块将是Go生态系统中影响最深远的变化,因为Go 1.将整个生态系统 - 代码,用户,工具等 - 从GOPATH转换为模块将需要在许多不同领域开展工作。
由于1.12版本的Go模块默认启用,GOPATH将在1.13版本中弃用。
对于那些开始使用Go 1.12的人来说,安装和设置将如下所示。
安装Go
在Mac上
brew install go
在Ubuntu上
curl -O https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz tar -xvf go1.9.3.linux-amd64.tar.gz sudo mv go /usr/local
*从Go 1.8开始,将GOPATH设置为环境变量不是必需的。如果我们没有设置一个,Go使用默认的GOPATH为 $HOME/go
构建项目
让我们在GOPATH之外的首选位置为go项目创建文件夹
注意: Go模块在GOPATH中被禁用。所以我们不能在GOPATH位置内部创建项目 $HOME/go
mkdir goapp1 cd goapp1
初始化模块
使用Go模块初始化项目名称。
go mod init goapp1
这将创建模块配置文件 go.mod
,其中包含模块名称和版本。
此 go.mod
文件定义Module的根,go命令将相应地与包一起使用,作为GOPATH的替代。
使用模块
Go模块主要解决以下用例,
- 用于获取外部包的依赖关系管理。
- 解析自定义包作为GOPATH的替代。
- 包版本和发布
依赖管理
让我们使用jsoniter设置简单的json数据生成应用程序。
goapp.go
package main import ( "fmt" controllers "goapp1/handlers" jsoniter "github.com/json-iterator/go" ) type AppInfo struct { Name string } func main() { info := AppInfo{ Name: "GoApp", } jsonString, _ := jsoniter.Marshal(&info) fmt.Println(string(jsonString)) }
该 go.mod
配置的工作通常喜欢 gemfile
用Ruby, requirement.txt
Python中或其他依赖管理工具,但不完全是。
构建go时,将根据go代码中的import语句获取最新版本的依赖项,并 go.mod
使用所需的依赖项更新配置。
go build
对于我们的示例, go build
将获取最新的jsoniter及其依赖项。
每次 go.mod
得更新, go build
命令创建一个名为的文件, go.sum
其中包含特定模块版本内容的预期加密校验和。
go.sum
不是锁 文件。它仅用于验证目的。有关详细信息,请参阅 这里 FAQ。
image.png
欲了解更多依赖管理使用情况参见 这里 。
解决自定义包
让我们创建一个自定义包并验证它是否在没有GOPATH的情况下得到解决。我创建了一个名为的包 handlers
mkdir handlers
编写一个函数
package controllers import "fmt" func ShowInfo() { fmt.Println("controller modeule info") }
使用main.go中的自定义包功能,
package main import ( "fmt" controllers "goapp1/handlers" jsoniter "github.com/json-iterator/go" ) type AppInfo struct { Name string } func main() { info := AppInfo{ Name: "GoApp", } jsonString, _ := jsoniter.Marshal(&info) fmt.Println(string(jsonString)) controllers.ShowInfo() }
现在 go build
解析没有GOPATH的自定义包。二进制文件将在指定的模块名称中创建 go.mod
。
让我们执行结果。
image.png
总结
模块系统将帮助我们为Go生态系统提供更好的身份验证和构建速度。
以上所述就是小编给大家介绍的《使用Go Module构建项目》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 《从零构建前后分离的web项目》实战 -5分钟快速构建炒鸡规范的VUE项目骨架
- golang构建项目的脚本
- flask蓝图构建小项目
- vueSSR: 从0到1构建vueSSR项目 --- 路由的构建
- Web 前端项目的构建工具
- 使用 Maven 构建 Java 项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。