3.0 go mod之远程仓库搭建-代码示例
注意事项
所谓的远程仓库指的是github,个人首次使用go mod在其他云仓库上尝试,并未成功,这浪费了我近2小时的时间;
如果你是初次尝试,那么除了github的地址换一下之外,其他的都按照示例操作,比如目录的创建,这也是我把我的操作步骤一个不拉地贴出来的原因,你只须按着做,必定成功;
如果你没有引用github上的go模块,也不打算分享代码到github,那么go mod对你没有任何作用,使用GOPATH即可。
在github上创建一个仓库
https://github.com/2haodb/gomng.git
把项目复制到本地,并提交一份代码上去
cd
git clone https://github.com/2haodb/gomng.git
cd gomng/
git remote add mng https://github.com/2haodb/gomng.git
cp -r /opt/dev/test/src/mod_test/ .
git add .
git commit -m "1.0.1"
git push -u mng master
代码内容
别人向你提到使用GO展示一个东西时,一定要用到GO的一些特性,尤其是面试官让你用GO写一段代码的时侯
root@black:~/gomng/mod_test/main# cd ..
root@black:~/gomng/mod_test# ls
main pkg1
root@black:~/gomng/mod_test# cd pkg1/
root@black:~/gomng/mod_test/pkg1# cat test.go
package pkg1
import(
"fmt"
"time"
) func Test(){
c := make(chan struct{}) go func(){
fmt.Println("我要出去看看园子里的花还活着吗")
time.Sleep(7*time.Second)
c <- struct{}{}
}() <- c
fmt.Println("这花被别人拿走了,再也看不到它了")
}
root@black:~/gomng/mod_test/main# cat main.go
package main
import(
"github.com/2haodb/gomng/mod_test/pkg1"
) func main(){
pkg1.Test()
}
执行go mod
# echo $GOPATH
/opt/code/gopath:/opt/dev/test
export GO111MODULE=on
cd ~/gomng/mod_test/pkg1/
rm -rf go.mod
go mod init github.com/2haodb/gomng/mod_test/pkg1
root@black:~/gomng/mod_test/main# go mod init github.com/2haodb/gomng/mod_test/main
go: creating new go.mod: module github.com/2haodb/gomng/mod_test/main
root@black:~/gomng/mod_test/main# ll
total 16
drwxr-xr-x 2 root root 4096 9月 12 18:03 ./
drwxr-xr-x 4 root root 4096 9月 12 17:24 ../
-rw------- 1 root root 54 9月 12 18:03 go.mod
-rw-r--r-- 1 root root 99 9月 12 17:31 main.go
root@black:~/gomng/mod_test/main# cat go.mod
module github.com/2haodb/gomng/mod_test/main go 1.12
重点说明-版本号
在github有类似下面的话,就在页面上绿色的按钮,点击下载的位置的下面一行,其中这个4166d71就是go mod需要的版本号
Latest commit4166d7121 minutes ago
那么对应的require部分可以这么写
module github.com/2haodb/gomng/mod_test/main require github.com/2haodb/gomng/mod_test/pkg1 4166d71
go 1.12
在运行程序之后会自动转化为下面的v版本
root@black:~/gomng/mod_test/main# cat go.mod
module github.com/2haodb/gomng/mod_test/main
require github.com/2haodb/gomng/mod_test/pkg1 v0.0.0-20190912093654-4166d71402a6
go 1.12
运行示例
root@black:~/gomng/mod_test/main# go run main.go
go: finding github.com/2haodb/gomng/mod_test/pkg1 4166d71
我要出去看看园子里的花还活着吗
这花被别人拿走了,再也看不到它了
root@black:~/gomng/mod_test/main# go run main.go
我要出去看看园子里的花还活着吗
这花被别人拿走了,再也看不到它了
可以看到首次运行的结果与第二次不一样,这是因为首次运行时go把依赖的模块下载下来了;
mod自动下载代码位置
go mod方式运行代码时自动将依赖的模块下载到$GOPATH/pkg/mod目录下,后续运行直接引用mod下的模块;同时,不会再去$GOPATH/src目录下找了。
root@black:~# echo $GOPATH
/opt/code/gopath:/opt/dev/test
root@black:~# ll /opt/code/gopath/pkg/mod/github.com/2haodb/gomng/mod_test
total 12
drwxr-xr-x 3 root root 4096 9月 12 17:41 ./
drwxr-xr-x 3 root root 4096 9月 12 17:41 ../
dr-x------ 2 root root 4096 9月 12 17:41 'pkg1@v0.0.0-20190912093654-4166d71402a6'/
重新演示一下上面的流程-任意位置
root@black:/tmp# mkdir ccc
root@black:/tmp# cd ccc/
root@black:/tmp/ccc# vim main.go
root@black:/tmp/ccc# go mod init github.com/2haodb/gomng/mod_test/main
go: creating new go.mod: module github.com/2haodb/gomng/mod_test/main
root@black:/tmp/ccc# vim go.mod root@black:/tmp/ccc# go run main.go
go: finding github.com/2haodb/gomng/mod_test/pkg1 4166d71
我要出去看看园子里的花还活着吗
这花被别人拿走了,再也看不到它了
main.go与go.mod的内容与之前相同,不同的是主程序的位置变了,
但这没有关系,这正是go mod的意义所在:你的项目代码可以在任意位置放置,只须正确引用github的代码;同时也无须关心依赖包的问题了,因为运行程序时, go自动下载依赖包到本地$GOPATH/pkg/mod目录。
关闭go mod
export GO111MODULE=off
关闭后,GOPATH生效
IDEA找不到第三方包
使用go mod,在项目目录下执行go mod init demo/v1,创建一个demo/v1的module
本地包的引入方式修改成
import "demo/v1/model"
如果IDE使用的是goland,那么修改Go > Go Modules(vgo),勾选 Enable Go Modules (vgo) integration,proxy填:https://goproxy.cn,不然IDE无法跟踪到代码
同效于shell命令行设置
- go env -w GO111MODULE=on
- go env -w GOPROXY=https://goproxy.cn,direct
3.0 go mod之远程仓库搭建-代码示例的更多相关文章
- Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现
Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...
- Git 远程仓库搭建
大名鼎鼎的git就不多做介绍了,总之.我们使用git来作为项目的一个版本控制工具,多人开发的项目的时候会轻松很多. 安装git whthomas@whthomas:~/workplace/gitOne ...
- HTTP.SYS远程执行代码漏洞分析 (MS15-034 )
写在前言: 在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...
- HTTP.sys远程执行代码漏洞
远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞. http://bbs.safedog.cn/thre ...
- Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)
2.1 摘要 2.1.1 漏洞介绍 漏洞名称: Exploiting Node.js deserialization bug for Remote Code Execution 漏洞CVE id: C ...
- Windows Shell远程执行代码漏洞((CVE-2018-8414)复现
0x00 SettingContent-ms文件介绍 .SettingContent-ms是在Windows 10中引入的一种文件类型,它的内容是XML格式进行编写的,主要用于创建Windows设 ...
- HTTP.SYS 远程执行代码漏洞分析(MS15-034 )
在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.Server软件. ...
- 【研究】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
1.1.1 漏洞描述 在2015年4月安全补丁日,微软发布的众多安全更新中,修复了HTTP.sys中一处允许远程执行代码漏洞,编号为:CVE-2015-1635(MS15-034 ).利用HTTP. ...
- IIS_CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现
CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现 一.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HT ...
随机推荐
- Linux mem 2.5 Buddy 内存回收机制
文章目录 1. 简介 2. LRU 组织 2.1 LRU 链表 2.2 LRU Cache 2.3 LRU 移动操作 2.3.1 page 加入 LRU 2.3.2 其他 LRU 移动操作 3. LR ...
- storm在windows下本地调试报错java.lang.UnsatisfiedLinkError cannot find rocksdbjnixxxxxxxxxx.dll
storm启动本地集群调试时,有时会找不到rocksdbjni.dll,storm加载该库的时候会先从jkd的bin下找rocksdbjni.dll,如果找不到就从pom文件的依赖包里找,再找不到就会 ...
- PHP create_function代码注入
今天做ctf遇到一道题,记录一下知识点 <?php class Noteasy{ protected $param1; protected $param2; function __destruc ...
- 第一课 Dubbo背景及原理
1 . 技术背景 Dubbo每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于 ...
- Emmet快速语法—助力HTML/CSS一行代码一个页面
学会之后牛掰的场景如下 我们的目标就是用一行代码=>写下面这样的长长长长的HTML结构来. 如:table>(thead.text>th{手机1}*4)+(tbody.text$*4 ...
- 关于Thread的interrupt
关于Thread的interrupt Thread的interrupt方法会引发线程中断. 主要有以下几个作用: 如Object的wait方法,Thread的sleep等等这些能够抛出Interrup ...
- 第五周PTA笔记 后缀表达式+后缀表达式计算
后缀表达式 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右进行(不用考虑运算符的优先级). 如:中缀表达式 3(5–2 ...
- python读写文件with open
简介 使用python的过程中肯定少不了读取文件的操作, 传统的形式是使用 直接打开.然后在操作.然后再关闭, 这样代码量稍微大些不说,一旦在操作步骤中出现报错,则无法进行文件的关闭: 案例一(读取) ...
- CSharp使用Thrift作为RPC框架入门(一)
前言 本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++ ...
- Spring Cloud Gateway过滤器精确控制异常返回(分析篇)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 在<Spring Cloud Gate ...