朗读

go mod(Golang包管理工具)的使用

文章目录[x]
  1. 1:go mod的使用:

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")可以省略的写成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的时候,import导入时,会从GO的安装目录(也就是GOROOT环境变量设置的目录)和GOPATH环境变量设置的目录中,检索 src/package 来导入包。如果不存在,则导入失败。 GOROOT,就是GO内置的包所在的位置。 GOPATH,就是我们自己定义的包的位置。

使用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 里如果需要使用这个包,需要使用这个包的 模块内的绝对路径来导入,比如:

"abc/github.com/xxx...."  导入这个包的地方是 模块内的绝对路径,就是要从go.mod所在的目录开始。

另外,如果我们想把这个项目放到GOPATH下面,不使用go mod模式,而是想使用GOPATH模式的话,,只需要把这个项目移到GOPATH环境变量包含的任意一个目录下面的src目录里,就可以启用GOPATH模式了(前提是 GO111MODULE 这个环境变量的值必须是auto 或 off)。

比如:go目录是GOPATH环境变量里的其中一个目录,我们将上面的代码复制到 src 目录下,删除原来的go.mod 、go.sum 两个文件(也可以不删除),代码一样可以运行。

点赞
  1. 风水说道:
    Google Chrome Windows 10

    我居然看完了,写的挺好的

    1. 洛 尘曦 洛 尘曦说道:
      Google Chrome Windows 10

      谢谢~小生会继续努力的~

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00