go module 使用

网站guide



文件下载

go1.14.2.windows-amd64.zip

goland IDE

goland 激活码


配置 环境变量

1.环境变量增加 GOBIN=C:\go1.14.2.windows-amd64\bin

go version
go1.14.2.windows-amd64 输入go version,看到版本信息就ok

2.配置GO111MODULE,GOPROXY

配置GO111MODULE
因为golang将来都会用go mod来进行版本管理, 配置GOPROXY go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct 逗号后面可以增加多个 proxy,最后的 direct 则是在所有 proxy 都找不到的时候,直接访问,代理访问不到的私有仓库就可以正常使用了。 https://goproxy.cn,direct
https://goproxy.io,direct
https://mirrors.aliyun.com/goproxy/,direct 详见Go官网说明:
https://github.com/golang/go/wiki/Modules#are-there-always-on-module-repositories-and-enterprise-proxies 因为github的项目代码可能无法下载, 所以要用国内的mirror,这里请务必选择一个代理地址输入 GOPATH 不需要配置,默认(c:\user\XXX\go)
- linux
`export GO111MODULE=on`
`export GOPROXY=https://goproxy.io` - windows
1.用`go env`设置环境变量,用Cmd/Powershell/Windows terminal输入(win10测试有效,推荐)
`go env -w GO111MODULE=on`
`go env -w GOPROXY=https://goproxy.io` 2.用set命令设置环境变量(win10测试无效,可能需要管理员权限)
`set GO111MODULE=on`
`set GOPROXY=https://goproxy.io`
tips:
1.linux 可写在`~/.bashrc`、`~/.zshrc`中,
2.windows可用 图形界面配置 环境变量

go env 查看结果

Modules

modules 是什么?

参考 https://gocn.vip/topics/9820

简单说就是包管理,Golang 的包管理素来以混乱著称,以前是依赖 $GOPATH,只要你的代码放在指定路径下就好了,完全没有 “包管理” 的概念。被社区吐槽了很久以后开始搞 vendor 机制,简单来说就是代码不光是可以放到指定路径,还可以放在项目自身路径的 vendor 文件夹。这个解决的问题是:你引用的代码包上游变更不会直接影响你的项目,这显然是开始关心 “包版本” 了。遗憾的是依旧没有解决包管理的问题,比如不同的包依赖了同一个包的不同版本怎么办?版本间代码冲突怎么办?vendor 机制并没有解决,于是围绕 vendor/ 社区就出了几十个包管理工具,一时间百花齐放、百家争鸣、各有所长,导致 golang 的包管理生态变得有些混乱。对这段历史感兴趣的可以阅读下笔者曾经写的文章《Go 包管理的前世今生》。

更有意思的是,在 go 官方社区看到包管理工具的乱象后,也做了个功能类似的工具 dep,原理与其他各类依靠vendor/ 机制的包管理工具类似,准备对包管理做统一。当大家对 dep 工具报以期望并纷纷开始切换到 dep 工具管理依赖包的时候,go 官方又发布了现在的 modules 机制,完全放弃了之前的 dep 工具与 vendor 机制。这样的操作在社区引起了巨大的争议,modules 与 go get、go build 等官方工具生态有很好的集成,官方的意图自然是希望抛开原有的历史包袱,通过全新的方式拯救世界。然而实际体验下来,却依旧不尽如人意。

总的来说大趋势已经是用 modules,go1.13 也对 modules 机制做了不少工作。

言归正传,本文的目标是希望能用 5~10 分钟时间带您学会使用 go modules,然后通过 QA 的形式,描述一些常见的问题。如果希望详细理解相关内容,也可以参考官方文档。

Modules

  • GO111MODULE=auto

      enables module-mode if any go.mod is found, even inside GOPATH.
    (Prior to Go 1.13, GO111MODULE=auto would never enable module-mode inside GOPATH).
  • GO111MODULE=off

      通过项目下的vendor目录,寻找依赖包(或者GOPATH目录 来查找)
  • GO111MODULE=on

      使用modules(GOPATH/pkg 目录下查找)

查看包的所有版本

go list -m -versions rsc.io/sampler
rsc.io/sampler v1.0.0 v1.2.0 v1.2.1 v1.3.0 v1.3.1 v1.99.99

go help mod, go mod help, go help modules查看help文档

Go mod provides access to operations on modules.

Note that support for modules is built into all the go commands,
not just 'go mod'. For example, day-to-day adding, removing, upgrading,
and downgrading of dependencies should be done using 'go get'.
See 'go help modules' for an overview of module functionality. Usage:
go mod <command> [arguments] The commands are:
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed

go help modules

etc......

goland 配置IDE

打开 goland ide
- welcome界面
[configure] => [setting]
- 项目界面
[file] => [setting]

1.Set Keymap(改成visual studio, vscode)

从market下载vs,vscode后,一定要选择才能使用
(默认是[windows]) 因为习惯了VS的按键,所以这个对我来说,挺重要的

2.配置GoRoot(一般不用处理, 会自动识别,从系统环境变量中获取)

3.配置GoPath(一般不用处理, 会自动识别,从系统环境变量中获取)

4.配置GoModules (必须勾选 Enable Go Modules intergration)


测试mod

1.创建main.go文件

package main

import (
"fmt"
"github.com/gogf/gf/os/glog"
//"log"
"rsc.io/quote"
) func main() {
//mod1
var log = glog.DefaultLogger() var logDir = "D:/glog"
err := log.SetPath(logDir)
if err != nil {
//fmt.Println("failed 2 SetPath(), logDir =",logDir, "err=",err)
fmt.Printf("failed 2 SetPath(),logDir =%s,err=%s\n",logDir,err)
return
} var s = "test goframe logger: ===>log path=" + log.GetPath()
fmt.Printf(s)
log.Printf(s) //mod 2
var str = "test "
fmt.Println(str + quote.Hello())
}

2.创建go.mod文件

输入go mod init或者go mod init awesomeProject

//go.mod 自动生成(我们增加require lib 就行)
module awesomeProject
go 1.14 require rsc.io/quote v1.5.2
require github.com/gogf/gf v1.12.1
依赖包 增加/修改(直接改go.mod, 再执行go mod tidy也行)
go mod edit -require="github.com/xxxx/yyyy @v1.0.2"
//go.sum (自动生成的版本校验hash值,不用关心)
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
...
...

tips:

格式化go.mod文件 go mod edit -fmt

3.使用go mod下载依赖(引用的包默认下载到 C:\Users\he\go\pkg)

PS C:\Users\he\go\src\awesomeProject> go mod tidy

go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

这样项目管理的依赖包就构建成功了

4.编译

PS C:\Users\he\go\src\awesomeProject>go build -o hello.exe

编译 go build hello.go

运行 hello.exe

显示
test goframe logger: ===>log path=D:/glog2020-04-13 18:31:30.142 test goframe logger: ===>log path=D:/glog
test Hello, world. 然后检查 D:/glog,是否有log信息

5.其他编译选项


go build -mod=vendor
忽略cache里的包,只使用vendor目录里的版本 go build -mod=readonly
此模式任何会导致依赖关系变动的情况都将导致build失败,前面提到过build能查找并更新依赖关系,使用这个选项可以检查依赖关系的变动。

go 相关资源的更多相关文章

  1. iOS之在写一个iOS应用之前必须做的7件事(附相关资源)

    本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者:@NIkant Vohra 原文:7 Things you must absolutely do befo ...

  2. 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍

    这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...

  3. AngularJS的学习网站及相关资源整理

    学习angularjs的网站及相关资源的整理,会不断更新. angularJs的官网:https://angularjs.org/       API文档:https://docs.angularjs ...

  4. ArcGis 在线地图相关资源

    原文:ArcGis 在线地图相关资源 世界边界和地点:http://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Bou ...

  5. (原)Struts 相关资源下载

    官网:http://struts.apache.org 点击[Download],进入页面如下,可以看到下载的资源: 点击[struts-2.3.20-all.zip],就能获取Struts2项目所有 ...

  6. C++相关资源

    http://www.cnblogs.com/xi52qian/p/4186983.html语言ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee ...

  7. NLP相关资源

    一 NLP相关资源站点 Rouchester大学NLP/CL会议列表 一个非常好的会议时间信息网站,将自然语言处理和计算语言学领域的会议,按照时间月份顺序列出. NLPerJP 一个日本友好人士维护的 ...

  8. 转载——web前端相关资源总结

    前端牛人博客:张克军.阮一峰.拔赤(李晶).拔赤(李晶)2.张鑫旭.梦想天空.阿当.泽飞.刘杰(嗷嗷).为之漫笔(李松峰).goddyzhao.hax的技术部落.周爱民.随网之舞.子鼠.司徒正美.ju ...

  9. 【转】在写一个iOS应用之前必须做的7件事(附相关资源)

    转自:http://www.cocoachina.com/ios/20160316/15687.html 本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者: ...

  10. MBG 相关资源链接

    MyBatis Generator(MBG)相关资源链接 http://mbg.cndocs.tk/quickstart.html http://www.mybatis.tk/ http://git. ...

随机推荐

  1. java.lang.OutOfMemoryError:PermGen space tomcat7 内存溢出

    Tomcat 解决 在启动项目的时候,会报java.lang.OutOfMemoryError:PermGen space错误. 在tomcat/bin/catalina.sh  windows li ...

  2. 如何利用awk累加第一列的值?

    以下是一个五行文件的例子: 1.[root@master yjt]# seq 5 |awk 'BEGIN{sum=0;print "总和:"}{if(NR<=4)printf ...

  3. Go by Example-循环

    Go By Example-循环语句 Go和其他大多数语言不太一样,没有While和Do-Whiile形式的循环,只有一个for,来实现循环. 基本结构 for循环的基本结构是这个样子 for 变量; ...

  4. String源码分析

    前言:String类在日常开发过程中使用频率非常高,平时大家可能看过String的源码,但是真的认真了解过它么,笔者在一次笔试过程中要求写出String的equals方法,瞬间有点懵逼,凭着大致的理解 ...

  5. linuxfind命令按照文件大小搜索的注意事项

    [root@localhost ~]# man find -size n[cwbkMG] File uses n units of space. The following suffixes can ...

  6. linux pthread_cond_signal

      pthread_cond_signal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal ...

  7. GO --- 将Reader 或者 ReadCloser 转化为 ReadSeeker

    原因: ReadSeeker 封装了Seek()方法,这个方法要求资源的任何位置都能被定位,例如存储在磁盘里文件,你可以随时读取文件的任意位置.而response.Body 是通过TCP连接从网络中读 ...

  8. Dubbo 2.6.0升级到2.7.3

    dubbo依赖,修改groupId和升级version版本号 <dependency> <groupId>com.alibaba</groupId> <art ...

  9. 【DOS】取某目录下某类型文件信息放入文本

    C:\Users\horn1\Desktop\新建文件夹>dir *.jar >1.txt 这样,所有扩展名为jar的文件信息就送到新建的文本文件1.txt中了.虽然简单,但也是个常用功能 ...

  10. 对请求数据的格式化 方案 Spring Cloud Gateway features:

    对请求数据的格式化 例如 {body:{}}--->{data:{}} 执行阶段概念 · OpenResty最佳实践 · 看云 https://www.kancloud.cn/kancloud/ ...