Go语言入门(二) 后台开发:依赖库的安装

创建日期: 2021年8月5日
环境参数: go version:v1.16.7
参考链接:
Go 语言语法快速入门
Go 语言编码规范
项目整体结构介绍
准备项目所需的 Go 类包
go mod使用

说明:
在开始本章之前,先按照项目整体结构介绍,新建出所需要文件夹和文件。
笔者是初学者,仅供个人做个记录。有搞错了的地方,请大神指正。

1. 依赖管理Go Modules

如果你的go的版本,是v1.11以上,则无需安装。
依赖管理工具的演变历史,看这里。
之前,有文章推荐dep,也是包管理工具,随着golang自身的完善,现在主流是推荐使用golang官网推荐的Go Moudle。

1.1 操作

在你的项目文件夹下,运行下面命令,之后,会生成go.mod文件。

# awesomeProject 可以省略,也可以自定义。省略时,默认为文件夹名,即项目名。
go mod init awesomeProject

运行上面命令后,看到如下提示:

go: creating new go.mod: module awesomeProject
go: to add module requirements and sums:
go mod tidy

如果,我们省略命令中的module名awesomeProject部分,则不会出现上面的提示。关于go mod tidy命令,我们之后再说,这里先无视。
现在,可以看到文件夹下,出现了自动生成的go.mod文件,默认内容如下:

module awesomeProject

go 1.16

1.2 配置

查看配置:

# Terminal上执行该命令,可以看到配置信息
go env

结果:

// 配置信息:
GO111MODULE=""
GOARCH="amd64"
// ...省略

(之前纠结的GOPATH也可以在配置中,看到路径了。)

修改配置
因为网络环境不同,国内貌似还需要配置代理。(参考go mod使用)

# 例子:开启Go Moudles模式的命令
go env -w GO111MODULE=on

修改后,我们再通过go env命令查看当前配置,如下:

GO111MODULE="on"
GOARCH="amd64"
// ...省略

在这篇文章中,对GO111MODULE的设置,有如下定义:

GO111MODULE 意义
on go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
off go命令行会使用modules,而一点也不会去GOPATH/src目录下查找。 (pkg 包都存放在 $GOPATH/pkg 下)
auto 默认值,go命令行将会根据当前目录来决定是否启用module功能。(pkg 包都存放在 $GOPATH/pkg 下)

GO111MODULE="on",意味着,我们已经开启了Go Moudles模式,可以自动下载安装依赖了。

  至此,包管理工具部分,告一段落。下面,我们用Go Modules安装所需要的库。


2. 小试牛刀–––利用Go Moudles安装库

2.1 操作

一般安装库,都会有一个命令,通过命令安装。资料中显示,Go Moudles更智能些,它会根据代码里import的包名,自动下载安装,我们来操作一下。

操作步骤:

  • STEP1: 新建一个文件,命名为main.go
  • STEP2: main.go的内容如下:
package main

import (
    "fmt"
    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Hello())
}

  • STEP3: 执行命令go run main.go
    出现如下错误:

main.go:5:1: no required module provides package rsc.io/quote; to add it:
go get rsc.io/quote

笔者按照提示,运行了go get rsc.io/quote,成功安装了这个库。此时,我们可以看懂打印台上显示,所下载安装的库的版本。并且,我们也可以在go.mod中,看到所安装库的版本信息。
之后,再次执行STEP3的命令,成功执行,看到Hello, world.被打印出来。

(疑问: 为什么资料上说,会自动查找并下载安装,我已经设置了go modules打开,为什么并没自动下载安装呢?
这里,是不是要每次新安装库的时候,都要执行go get命令呢?有待调查)

2.2 go mod使用

我么可以通过go help mod命令,查询go mod的命令:

命令 意义
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed


3. 常用的库

这部分,会在之后的学习中,慢慢补充。

3.1 HTTP web framework Gin

https://golang.org/doc/tutorial/web-service-gin
Gin是一个框架,效率是HttoRoute的40倍,golang推荐使用的。



4. 补充知识–––GOROOT,GOOPATH

  GOROOT,GOOPATH概念。看了一些文章,有提到这两组概念的,虽然,有的概念,貌似已经被淘汰了,感兴趣的可以稍微了解下。(参考)

  • GOROOT: GOROOT是Go的安装目录。Go安装程序会自动设置$GOROOT环境变量,一般不需要手动进行设置。
    Linux下GOROOT的缺省目录为 /usr/local/go/

  • GOPATH:GOPATH目录是Go的工作目录,其中包含本地的项目文件,项目中引用的的第三方package,以及生成的二进制文件。
    Go语言工具要求GOPATH的目录结构包含bin,pkg,src三个子目录。
    安装依赖包时,多次提到过GOPATH。但是,因为改成vender模式进行包管理,现在已经不需要把项目放到GOPATH下了。

上一篇:Go语言入门(一) 后台开发:我的第一个Go项目
下一篇: 待续。。。

你可能感兴趣的:(Go语言入门(二) 后台开发:依赖库的安装)