关于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. SpringBoot项目的测试类

    1. package soundsystem; import static org.junit.Assert.*; import org.junit.Test; import org.junit.ru ...

  2. keil编译器从ac5迁移到ac6

    今天在安富莱的论坛上ac6的使用方法,所以,就小试牛刀玩了玩,终于ok了.使用keil5.25+stm32+hal库,5.23开始才支持ac6,因此keil版本不能太低. 可以参考:https://b ...

  3. swift修饰符

    Declaration Modifiers Declaration modifiers are keywords or context-sensitive keywords that modify t ...

  4. 学习:多字节编码(ANSI)和UNICODE编码的关系

    Windows 既可以使用 Unicode 字符集又可以使用传统的字符集(如多字节编码)来实现对多种语言的支持,以适应国际市场的要求.与传统的字符集编码相比,Unicode 是世界通用的字符编码标准, ...

  5. 二叉堆的构建(Java)

    package com.rao.linkList; /** * @author Srao * @className BinaryHeap * @date 2019/12/3 14:14 * @pack ...

  6. Insecure Code Management

    Insecure Code Management-------------不安全的代码管理 Get the password (in clear text) from the admin accoun ...

  7. 开发(二) ardunio批量固件上传地址

    https://blog.csdn.net/Naisu_kun/article/details/84958561 批量烧录固件到模块中上面讲了如何编写上传程序,接下来讲讲如何量产.相比<Ardu ...

  8. Lexicographical Substring Search SPOJ - SUBLEX (后缀自动机)

    Lexicographical Substrings Search \[ Time Limit: 149 ms \quad Memory Limit: 1572864 kB \] 题意 给出一个字符串 ...

  9. Numpy | 10 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 下面的图片展示了数组 b 如何通过广播来与数组 a 兼容. 4x ...

  10. Hibernate的批量查询——HQL

    HQL(Hibernate Query Language)查询: 1.查询所有学生信息: public static void testSel() { Session session = Hibern ...