- 1:go mod的使用:
package
说go mod之前,先来回忆一下包的相关知识。我们知道go语言源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。
1.main包
Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,需要import导入!
2.package-->包的命名
src 目录是以代码包的形式组织并保存 Go 源码文件的。每个代码包都和 src 目录下的文件夹一一对应。每个子目录都是一个代码包。
代码包包名和文件目录名,不要求一致。比如文件目录叫 hello,但是代码包包名可以声明为 “main”,但是同一个目录下的源码文件第一行声明的所属包,必须一致!--->也就是说package
3. import-->引入包
A.普通方式
// 单个导入
import "package"
// 批量导入
import (
"package1"
"package2"
)
B.点操作
import(
. "fmt"
)
用的fmt.Println("hello world")
可以省略的写成
C._操作
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数。也就是说,使用下划线作为包的别名,会仅仅执行init()。
D.起别名
import (
p1 "package1"
p2 "package2"
)
// 使用时:别名操作,调用包函数时前缀变成了我们的前缀
p1.Method()
4.管理外部包:
go get github.com/go-sql-driver/mysql
# 参数
-u 强制更新包
-v 显示执行过程
还有就是安装相关依赖的时候因为网络等各方面的原因可能导致下载失败这个时候可以设置代理(或者百度一下):
# 启用 Go Modules 功能-->这个mod功能用的时候开启的
go env -w GO111MODULE=on
# 配置 GOPROXY 环境变量,以下三选一
# 1. 官方
go env -w GOPROXY=https://goproxy.io
# 2. 七牛 CDN
go env -w GOPROXY=https://goproxy.cn
# 3. 阿里云(推荐)
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
# 确认一下:
go env | grep GOPROXY
#显示的内容
GOPROXY="https://goproxy.io"
go mod包管理的使用官方文档:https://github.com/golang/go/wiki/Modules
go mod的使用:
我们知道正常的情况下,如果不使用go mod的时候,GOROOT,就是GO内置的包所在的位置。
使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,比如(该路径不在GOPATH内):
# 启用 Go Modules 功能-->这个mod功能用的时候开启的
go env -w GO111MODULE=on 或者 go env -w GO111MODULE=auto
当然下载太慢的话,可以换一下代理,参考上面的刚刚列出的阿里云都可以
启用之后这个时候你再使用go get 拉取依赖的时候包就在pkg/mod目录下
进到刚刚的项home/test1目录下进入项目目录abc
进入终端输入go mod init abc(不一定非得是abc)
go mod 初始化成功,会在当前目录下生成一个 go.mod 文件。包含go.mod文件的目录也被称为模块根,也就是说,go.mod 文件的出现定义了它所在的目录为一个模块。
此时我们可以在目录下面新建一个go文件main.go,输入下面的代码:
运行一下,会看到输出结果: { false false false} ,同时项目目录下多出了一个文件 go.sum 。go.sum 是记录所依赖的项目的版本的锁定。
在 main.go 里如果需要使用这个包,需要使用这个包的 模块内的绝对路径来导入,比如:
另外,如果我们想把这个项目放到GOPATH下面,不使用go mod模式,而是想使用GOPATH模式的话,,只需要把这个项目移到GOPATH环境变量包含的任意一个目录下面的src目录里,就可以启用GOPATH模式了(前提是 GO111MODULE 这个环境变量的值必须是auto 或 off)。
比如:go目录是GOPATH环境变量里的其中一个目录,我们将上面的代码复制到 src 目录下,删除原来的go.mod 、go.sum 两个文件(也可以不删除),代码一样可以运行。
我居然看完了,写的挺好的
谢谢~小生会继续努力的~