关于go modules的使用外面的教程实在太多了,我这里只讲下我自己使用的三种情形。

准备工作:

1、新建个文件加gomod_test。

2、在这个目录输入命令 go mod init gomod_test

情形一:比较常见的情况,引用github的包

比方我有如下代码 main.go

package main

import (
"fmt" "github.com/name/foo"
) func main() {
foo.Foo()
}

直接命令 go mod tidy,然后就可以go build编译

情形二:引用自己工程里的包

目录结构如下

gomod_test

  |-----main.go

  |-----mypackage

      |---------mypackage.go

main.go要引用mypackage包,代码改成如下。

注意 "gomod_test/mypackage",gomod_test是我们上面go mod init gomod_test的模块名,mypackage是你的包目录

package main

import (
"fmt"
"gomod_test/mypackage"
"github.com/name/foo"
) func main() {
foo.Foo()
mypackage.XXX()
}

  

情形三:引用本地包

这种情况的原因是:比方我们依赖了github.com/name/mylib这个库,但我们需要在纯内网无外网环境下编译,这时候go get不到github的代码,就需要我们用replace替换成本地包。

1、首先我需要把github.com/name/mylib代码下载下来,你可以直接下载zip,也可以clone,到工程根目录

2、编辑go.mod文件加入下面这一行(也可以用go mod edit命令编辑,更正统一些)

replace github.com/name/mylib=> ./mylib

要确保 ./mylib跟你的下载代码的目录一致

目录结构如下

gomod_test

  |-----main.go

  |-----mypackage

      |---------mypackage.go

  |-----mylib

      |---------mylib.go

main.go 改成如下

package main

import (
"fmt"
"gomod_test/mypackage"
"github.com/name/mylib"
"github.com/name/foo"
) func main() {
foo.Foo()
mypackage.XXX()
mylib.DoXXX()
}

其他

1、如果想把将依赖复制到vendor下可以用go mod vendor命令

2、如果想用vendor里的依赖库编译可执行文件可以用命令 go build -mod=vendor

[Golang] go modules使用的更多相关文章

  1. 在go modules中使用replace替换无法直接获取的package(golang.org/x/...)

    上一篇里我们介绍了使用go get进行包管理. 不过因为某些未知原因,并不是所有的包都能直接用go get获取到,这时我们就需要使用go modules的replace功能了.(当然大部分问题挂个梯子 ...

  2. golang包管理解决之道——go modules初探

    golang的包管理是一直是为人诟病之处,从golang1.5引入的vendor机制,到准官方工具dep,目前为止还没一个简便的解决方案. 不过现在go modules随着golang1.11的发布而 ...

  3. Golang(八)go modules 学习

    0. 前言 最近加入鹅厂学习 k8s,组内使用 Go 1.11 以上的 go modules 管理依赖,因此整理了相关资料 本文严重参考原文:初窥Go module 1. 传统 Golang 包依赖管 ...

  4. Golang modules包依赖管理工具

    初始化 执行go mod  init module-name,其中module-name为包名字,执行完后会生成go.mod文件,如下 module module-name go 1.13 包管理 使 ...

  5. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

    目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...

  6. IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法

    IDEA 的编辑器都很强悍,所以现在学Go 也想用他啊,无奈这个插件搞了好久,整理了下流程记录下 1. 当然是下载 IDEA 编辑器了 http://www.jetbrains.com/idea/do ...

  7. golang实现aes-cbc-256加密解密过程记录

    我为什么吃撑了要实现go的aes-cbc-256加密解密功能? 之前的项目是用php实现的,现在准备用go重构,需要用到这个功能,这么常用的功能上网一搜一大把现成例子,于是基于go现有api分分钟实现 ...

  8. 一键解决 go get golang.org/x 包失败

    问题描述 当我们使用 go get.go install.go mod 等命令时,会自动下载相应的包或依赖包.但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况. ...

  9. 再探go modules:使用与细节

    还有半个月go1.12就要发布了.这是首个将go modules纳入正式支持的稳定版本. 距离go modules随着go1.11正式面向广大开发者进行体验也已经过去了半年,这段时间go module ...

随机推荐

  1. oracle-shell备份

    获取PAH写入脚本 cat /home/oracle/.bash_profile 编写脚本oadbbak.sh PATH backuptime=`date +%Y%m%d%H%M%S` exp use ...

  2. Beta冲刺阶段博客集合

    Beta冲刺阶段博客集合 课程名称:软件工程1916|W(福州大学) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标:作业集合 团队队员 队员学号 队员姓名 个人博客地址 备注 2 ...

  3. python基础知识笔记-集合

    集合使用花括号将元素之间用逗号隔开即可.集合的输出里不会出现相同的元素.集合中有并集.交集.差集等,以下为一些简单的表达: def main(): list1=[1,1,2,2,3,3] print( ...

  4. Ofbiz项目学习——阶段性小结——删除数据

    一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Obj ...

  5. python--requests模块初识

    requests,发送http请求(用python模拟浏览器浏览网页)requests.get("http://www.baidu.com") 示例: import request ...

  6. centos 7 开启外网方法端口方法

    firewall-cmd --zone=public --add-port=80/tcp --permanent  开启80端口 systemctl stop firewalld.service sy ...

  7. Numpy | 06 从已有的数组创建数组

    numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个. numpy.asarray(a ...

  8. ES6 let 和const

    一.var 的缺陷:var 只有全局作用域和函数作用域,没有块级作用域,除了在函数内部的变量默认都属于window var foo='hello'; fn=function(){ var foo='w ...

  9. 你真的知道Java中boolean类型占用多少个字节吗?

    为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这 ...

  10. nginx 访问控制之 限速

    nginx限速可以通过 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块来实现限速的功能. 一.ngx_http_limit_conn ...