创建日期: 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项目
下一篇: 待续。。。