1.语法糖

传入相同类型的可变长度的参数

会推断出value的类型

2.Module

     

    

 

 go Module是go相关包的集合,是go的依赖管理的工具,go.mod文件保存就是所有的依赖列表

使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,包含go.mod文件的目录也被称为模块根,也就是说,go.mod 文件的出现定义了它所在的目录为一个模块。

 比如我们现在的go path路径为:

  而我们的项目所在的位置为:

 

 当我们的工程位置与go path不一致的时候如果引入一些其他的包 ,构建的时候就会出错

 

 这个时候就要使用go mod来管理依赖包

 使用命令 go mod init test来创建mod文件:

现在他只包含  mod文件的名字,go的版本号  还不包含我们的依赖库的版本号.

 然后使用构建命令构建项目  go build

 

此时增加sum文件,go.mod文件增加了依赖包及版本

  

此时项目就可以成功运行:

 

 

如何知道工程引用了哪些依赖呢 ? 使用go mod graph 命令打印出依赖

 go mod 管理的依赖还是存放在我们的go path下面的。

 将他删除过后,使用 go mod download命令可以将其下载回来

go mod tidy:把我们需要的依赖加进来,不需要的剔除

go mod verify: 验证依赖,

go mod why : 展示依赖关系

当我注释掉这段代码的时候,lru

 

 

把不需要的删掉

恢复代码:

依赖添加进去:

修改一个没有的版本,再验证它:

vendor是将工程的所有的依赖放到当前工程的vendor依赖下面去,这个相当于把我们的依赖和gopath独立开来,这样的问题就是会产生很多的冗余,他的使用场景是在Devops的时候,需要让Devops打包发布的时候,把依赖全部打包到vendor下面,而不需要再去拉取依赖,防止拉取依赖的时候出错而打包不成功。

 

如何往go.mod加依赖呢?  使用 go mod edit  -require 命令

格式化go.mod文件:

在依赖中排除某个版本使用 exclude命令:下载的时候就不会下载这个版本的依赖

删除这一行:dropexclude: