go module 使用

网站guide



文件下载

go1.14.2.windows-amd64.zip

goland IDE

goland 激活码


配置 环境变量

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

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

2.配置GO111MODULE,GOPROXY

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

go env 查看结果

Modules

modules 是什么?

  1. 参考 https://gocn.vip/topics/9820
  2. 简单说就是包管理,Golang 的包管理素来以混乱著称,以前是依赖 $GOPATH,只要你的代码放在指定路径下就好了,完全没有 “包管理” 的概念。被社区吐槽了很久以后开始搞 vendor 机制,简单来说就是代码不光是可以放到指定路径,还可以放在项目自身路径的 vendor 文件夹。这个解决的问题是:你引用的代码包上游变更不会直接影响你的项目,这显然是开始关心 “包版本” 了。遗憾的是依旧没有解决包管理的问题,比如不同的包依赖了同一个包的不同版本怎么办?版本间代码冲突怎么办?vendor 机制并没有解决,于是围绕 vendor/ 社区就出了几十个包管理工具,一时间百花齐放、百家争鸣、各有所长,导致 golang 的包管理生态变得有些混乱。对这段历史感兴趣的可以阅读下笔者曾经写的文章《Go 包管理的前世今生》。
  3. 更有意思的是,在 go 官方社区看到包管理工具的乱象后,也做了个功能类似的工具 dep,原理与其他各类依靠vendor/ 机制的包管理工具类似,准备对包管理做统一。当大家对 dep 工具报以期望并纷纷开始切换到 dep 工具管理依赖包的时候,go 官方又发布了现在的 modules 机制,完全放弃了之前的 dep 工具与 vendor 机制。这样的操作在社区引起了巨大的争议,modules go getgo build 等官方工具生态有很好的集成,官方的意图自然是希望抛开原有的历史包袱,通过全新的方式拯救世界。然而实际体验下来,却依旧不尽如人意。
  4. 总的来说大趋势已经是用 modulesgo1.13 也对 modules 机制做了不少工作。
  5. 言归正传,本文的目标是希望能用 5~10 分钟时间带您学会使用 go modules,然后通过 QA 的形式,描述一些常见的问题。如果希望详细理解相关内容,也可以参考官方文档。

Modules

  • GO111MODULE=auto

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

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

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

  1. 查看包的所有版本
  2. go list -m -versions rsc.io/sampler
  3. 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文档

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

go help modules

  1. etc......

goland 配置IDE

  1. 打开 goland ide
  2. - welcome界面
  3. [configure] => [setting]
  4. - 项目界面
  5. [file] => [setting]

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

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

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

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

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


测试mod

1.创建main.go文件

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/os/glog"
  5. //"log"
  6. "rsc.io/quote"
  7. )
  8. func main() {
  9. //mod1
  10. var log = glog.DefaultLogger()
  11. var logDir = "D:/glog"
  12. err := log.SetPath(logDir)
  13. if err != nil {
  14. //fmt.Println("failed 2 SetPath(), logDir =",logDir, "err=",err)
  15. fmt.Printf("failed 2 SetPath(),logDir =%s,err=%s\n",logDir,err)
  16. return
  17. }
  18. var s = "test goframe logger: ===>log path=" + log.GetPath()
  19. fmt.Printf(s)
  20. log.Printf(s)
  21. //mod 2
  22. var str = "test "
  23. fmt.Println(str + quote.Hello())
  24. }

2.创建go.mod文件

输入go mod init或者go mod init awesomeProject

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

tips:

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

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

  1. PS C:\Users\he\go\src\awesomeProject> go mod tidy
  2. go: finding module for package rsc.io/quote
  3. go: downloading rsc.io/quote v1.5.2
  4. go: found rsc.io/quote in rsc.io/quote v1.5.2
  5. go: downloading rsc.io/sampler v1.3.0
  6. go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

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

4.编译

  1. PS C:\Users\he\go\src\awesomeProject>go build -o hello.exe
  2. 编译 go build hello.go
  3. 运行 hello.exe
  4. 显示
  5. test goframe logger: ===>log path=D:/glog2020-04-13 18:31:30.142 test goframe logger: ===>log path=D:/glog
  6. test Hello, world.
  7. 然后检查 D:/glog,是否有log信息

5.其他编译选项


  1. go build -mod=vendor
  2. 忽略cache里的包,只使用vendor目录里的版本
  3. go build -mod=readonly
  4. 此模式任何会导致依赖关系变动的情况都将导致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. shell 边边角角

    [Shell学习笔记] 数组.关联数组和别名使用 Linux中bash脚本数组和字典使用举例 Linux Shell 通配符.元字符.转义符使用实例介绍

  2. K Simple question (第十届山东理工大学ACM网络编程擂台赛 正式赛)

    题解:素数筛+唯一分解定理 可以把素数筛那部分放到while之外,减小时间复杂度. #include <stdio.h> #include <stdlib.h> #includ ...

  3. ElasticSearch及其插件安装配置

    elasticsearch安装使用 .安装步骤: 1.下载elasticsearch的rpm包: wget https://artifacts.elastic.co/downloads/elastic ...

  4. IdentityServer4入门三:授权模式

    在入门一.入门二我们实现了一个完整的API保护的过程.需要保护的API只需在其Controler上应用[Authorize]特性,来显式指定受保护的资源.而我们实现的这个例子,所应用的模式叫“Clie ...

  5. C语言联合

    联合使用关键字union,表示的一种量,只占用一块内存,具体如何占用取决于类型最大的那个.比如int和float会选用float. 联合也可以和结构体结合起来用,也可以赋值,通过.属性名的方式指定初始 ...

  6. springMVC_配置文件搭建基础环境

    SpringMVC与Struts的区别. 一.基础jar包 二.①DispatcherServlet,handelMapping,webAction(colltroller),ModelAndView ...

  7. 解决微信小程序要求TLS版本不低于1.2问题

    客官,本文可在我的小站中看到哦 昨天项目服务器发生意外,其上的IIS服务无法使用,导致项目后台瘫痪,倒腾一番最终以无法修复告终,启用备用的服务器,从安装IIS环境开始,然后最后所有的东西都准备就绪,却 ...

  8. uefi是如何启动linux内核的?

    答:uefi启动linux内核有两条路径: 1. uefi直接进入uefi shell来启动linux内核 2. uefi直接进入uefi shell启动grub启动器,然后进入grub shell启 ...

  9. IOS APP开发入门案例

    1.创建新项目 2.设计布局,main.storyboard中,在控件库中 3.布局控件关联控制器 4.设置事件或者显示模式 5.编写代码: import UIKit class ViewContro ...

  10. 初始化jsp页面下拉选备选项【我】

    将下列 script标签放到页面的最下端 <!-- 初始化的全局变量,供js中使用,主要拼接下拉选的初始化值 --> <script type="text/javascri ...