golang package的使用
前言
golang 使用包 package 来管理定义模块,可以使用 import 关键字来导入使用。
如果导入的是 go 自带的包,则会去安装目录 G O R O O T / s r c ∗ ∗ 按 包 路 径 加 载 , 如 f m t 包 如 果 是 我 们 g o g e t 安 装 或 自 定 义 的 包 , 则 会 去 ∗ ∗ GOROOT/src** 按包路径加载,如 fmt 包 如果是我们 go get 安装或自定义的包,则会去 ** GOROOT/src∗∗按包路径加载,如fmt包如果是我们goget安装或自定义的包,则会去∗∗GOPATH/src 下加载
一、 . 包导入
.
导入包可以让包内的方法注册到当前包的上下文中,直接调用方法名即可,不需要再加包前缀。
import . "fsm.com/demotest/models"
二、_ 包引用操作,
_
包引用操作,只会执行包下各模块中的 init 方法,并不会真正的导入包,所以不可以调用包内的其他方法。
import _ "github.com/go-sql-driver/mysql"
三、 可以给包起个别名,
可以给包起个别名用于两个包的包名存在冲突,或者包名太长需要简写时
import sql "github.com/go-sql-driver/mysql"
四、自定义包名的使用
如下图所示:
我们向引用models包下的User结构体时,golang是不支持相对路径引用的,所以我们要用go指令创建自定义模块,然后再引用自定义包,go 指令是:
go mod init fsm.com/demotest
fsm.com/demotest就是自定义的模块名
总结
··相关的包操作 go mod 命令··
:
download:下载模块到本地缓存;
edit:从工具或脚本编辑go.mod;
graph:打印模块需求表;
init:在当前目录初始化一个新的模块
tidy:添加丢失的模块并删除未使用的模块;
vendor:制作依赖项的副本;
verify:验证依赖项是否有预期内容;
why:解释模块或包为什么需要;
go mod download [-x] [-json] [modules]:下载命名的模块,可以是模块模式选择主模块的依赖关系,也可以是 path@version 形式的模块查询。没有参数时,下载适⽤于主模块的所有依赖项(相当于“go mod download all”)。
-json :将⼀系列 JSON 对象打印到标准输出,描述每个下载的模块,对应于这个 Go 结构:
type Module struct {
Path string //模块路径
Version string //模块版本
Error string //模块加载错误
Info string //.info缓存文件的绝对路径
GoMod string //.mod缓存文件的绝对路径
Zip string //.zip缓存文件的绝对路径
Dir string //缓存根目录的绝对路径
Sum string //路径、版本的校验和
GoModSum string //go.mod 的校验和
}
-x:打印下载执⾏的命令;
go mod edit [editing flags] [-fmt|-print|-json] [go.mod]:提供了⼀个⽤于编辑 go.mod 的命令⾏界⾯,主要供⼯具或脚本使⽤。它只读取 go.mod,不查找有关模块的信息。
编辑标志指定编辑操作的序列:
-module:更改模块的路径;
-require=path@version 和 -droprequire=path:添加或删除给定路径和版本的模块到需求项;
-exclude=path@version 和 -dropexclude=path@version:添加或删除给定路径和版本的模块到排除项;
-replace=old[@v]=new[@v]:替换给定路径和版本的模块;
-dropreplace=old[@v]:丢弃给定模块路径和版本对的替换;
-go=version:设置预期的 Go 语⾔版本;
-fmt :重新格式化 go.mod ⽂件⽽不进⾏其他更改;
-print 标志以其⽂本格式打印最终的 go.mod;
-json 标志以 JSON 格式打印最终的 go.mod ⽂件;
go mod graph [-go=version]:以文本形式打印模块需求表;
如果我的内容能帮上你是我的荣幸,如果能打赏一下那就是对我最大的鼓励