Go包管理工具Module介绍

一、Go Modules

1. 介绍

Go modules是官方提供的go包管理工具,用于解决go包管理和依赖问题;从Go1.11开始引入,到现在Go1.14已经比较完善,Go1.16已经全面推荐使用,并且默认为开启;Go Modules类似于JS的NPM,Java的maven和gradle。

  • GO111MODULE=off: 不使用 modules 功能。
  • GO111MODULE=on: 使用 modules 功能,不会去 GOPATH 下面查找依赖包。
  • GO111MODULE=auto: Golang 自己检测是不是使用 modules 功能。
  • 计划在 Go1.17 中放弃对 GOPATH将忽略 GO111MODULE,需要关注默认下载目录如何设置,此特性静观1.17版本发布;

2. 关于go.mod

go.mod是Go项目的依赖描述文件:

module hello

go 1.14

require github.com/gogf/gf v1**.15.3**

  1. module是配置项目名称

  2. go配置的是使用的golang版本

  3. require配置引用第三方依赖包路径和版本,latest表示最新版本;

配置完编译成功后,生成go.sum依赖分析结果,里面会有当前所有的依赖详细信息;

3. go modules指令

  1. go get

    go get -u (没有参数)下载、更新当前包下 直接和间接的依赖的最新版本,并不会更新整个项目。 go get -u ./...下载、更新当前项目根目录下直接或间接的依赖的最新版本,但是会排除测试包的依赖;例如将v1**.2.1更新为v2.0.1** go get -u=patch ./...下载、更新当前项目根目录下直接或间接的依赖的大版本的最新小版本,例如,将v1**.2.1更新为v1.2.5** go get -u -t ./... 和go get -u ./...相似,但是会更新测试包的依赖 go get -d 只执行下载动作,而不执行安装动作;不再支持go get -m ,使用go get -d替代。

  2. go list

    go list -m all 列出当前项目build时需要使用直接或间接依赖的版本。 go list -u -m all 不仅会列出当前使用模块的版本,还会列出当前使用模块的最新小版本和最新版本。

  3. go build ./... 构建当前项目 

  4. go test ./... 执行当前项目下的测试

  5. go mod

go mod tidy 删除不必要的依赖,添加OS, architecture, and build tags组合所需要的依赖。 go mod vendor 可选步骤,用于建立vendor文件夹,用于vendor机制的包管理. go mod init 将go项目初始化成module-mode,使用go modules进行依赖管理。 go mod verify 校验go.sum记录的依赖信息是否正确

4. go modules需要注意的地方

  • 在项目根目录下生成go.mod
  • 项目中的包引用使用import "[module名称]/[包所在文件在项目中的相对路径]"

二、Goland配置

首先我们需要开启go modules功能,然后配置代理;不配置代理会访问国外地址,会很慢;建议使用以下三个地址:

  • https://goproxy.io
  • https://goproxy.cn
  • https://mirrors.aliyun.com/goproxy/

image-20200308224453465

项目结构:

image-20200308230407947

使用上节课我们的hello world程序,创建go.mod,内容如下

module hello

go 1.14

require ( github.com/gogf/gf v1**.15.3** )

代码内容如下:

package main

import ( "fmt" "github.com/gogf/gf" "github.com/gogf/gf/crypto/gmd5" )

func main(){ fmt.Println("hello world!") fmt.Println(gf.VERSION) fmt.Println(gmd5.EncryptString("123456")) }

第一次我们需要下载依赖包,可以选择go.mod文件右键选择Go Mod Tidy

或者点击没下载的包,alt+enter键,选择Sync packages of hello

image-20200308224919808

然后运行程序看到运行结果

hello world! v1**.15.3** e10adc3949ba59abbe56e057f20f883e <nil>

Process finished with exit code 0

代码地址

教程视频

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

​一篇文章总结一下Python库中关于时间的常见操作

前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在

Android So动态加载 优雅实现与原理分析

背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我