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 ...
随机推荐
- js 鼠标和键盘事件
js 鼠标和键盘事件 鼠标事件 聚焦事件 离焦事件 鼠标单击和双击 鼠标的其他事件 鼠标事件对象 键盘事件 鼠标事件 聚焦事件 <input type="text" id=& ...
- 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;
Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...
- Java核心技术--Java程序设计
Java术语 术语名 缩写 解释 Java Development Kit(Java开发工具包) JDK 编写Java程序的程序员使用的软件 Java Runtime Environment(Java ...
- thinkphp5 目录结构
/* ├─application 应用目录 │ ├─common 公共模块目录(可以更改) │ ├─module_name ...
- 微信小程序(二)
创建项目: hello.wxml hello world 每个学习的开始 <view>hello world!</view> hello.js 像 app.js 一样 Page ...
- [atARC115F]Migration
称$k$个物品的位置$(a_{1},a_{2},...,a_{k})$为一个状态,并设初始状态为$S$,结束状态为$T$ 定义状态的比较:首先根据$\sum_{i=1}^{k}h_{a_{i}}$,即 ...
- OAuth 2.1 的进化之路
背景 2010年, OAuth 授权规范 1.0 (rfc 5849) 版本发布, 2年后, 更简单易用的 OAuth 2.0 规范发布(rfc 6749), 这也是大家最熟悉并且在互联网上使用最广泛 ...
- Winform开发的快速、健壮、解耦的几点建议
在Winform开发领域开发过十多年的项目中,见证着形形色色的架构和官方技术的应用,从最早类似Winform模式的WebForm技术,到接着的JQuery+界面组件,再到Asp.net Core的技术 ...
- lilypond 进阶—— 用scheme画图
lilypond的许多底层设定是通过scheme语言写的,特别是要写函数的时候. 所以了解一下scheme的作用很重要. 不幸的是,不像lilypond本身的代码,scheme代码的结果是不会直接预览 ...
- 【IDEA】IntelliJ IDEA 2020.1破解版
IntelliJ IDEA 2020.1破解版 2020-09-09 14:58:56 by冲冲 安装链接: 1. 百度网盘下载地址链接:https://pan.baidu.com/s/1cxjz ...