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. SONiC项目的发展及其相关介绍(转载)

    SONiC作为一个开源项目,理论上是包含了SAI(switch abstraction interface,交换机抽象接口),SAI是没有开源的,厂商自己完成统一的API,提供给上层sonic用户来调 ...

  2. 【原创】go语言学习(十)Map类型

    目录 声明和初始化 基本操作 map排序 map类型的切⽚片 课后作业 声明和初始化 1.map类型是⼀一个key-value的数据结构. //var a map[key的类型]value类型 var ...

  3. s-w-i-p-e-r做一个-老-唬-机-抽-蒋

    <template> <div class="selfLotteryBox"> <div class="row"> < ...

  4. spark错误记录总结

    1.执行spark-submit时出错 执行任务如下: # ./spark-submit --class org.apache.spark.examples.SparkPi /hadoop/spark ...

  5. linux redhat 安装了jdk检查版本不是自己安装的版本的解决办法

    Linux下安装jdk java -version 不是自己所需要的版本 设置环境变量,这是最重要的 在etc/profile文件下添加 export JAVA_HOME=/usr/java/jdk1 ...

  6. GO语言反射

    反射可以作为了解,不必深入! 反射介绍 Go语音提供了一种机制在运行时更新变量和检查它们的值.调用它们的方法和它们支持的内在操作,但是在编译时并不知道这些变量的具体类型.这种机制被称为反射.反射也可以 ...

  7. 2018-2019-2 网络对抗技术 20165311 Exp 9 Web安全基础

    2018-2019-2 网络对抗技术 20165311 Exp 9 Web安全基础 基础问题回答 实践过程记录 WebGoat安装 SQL注入攻击 1.命令注入(Command Injection) ...

  8. 纯CSS画三角形(带边框)

    实例一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  9. Mac 中使用phpstorm 修改文件提示"only read",只读权限

    在终端中执行命令: 给max系统用户liutao赋予整个项目文件权限,即可成功 sudo chown -R liutao /Users/liutao/Desktop/vagrant/newprojec ...

  10. Code First 迁移----官方 应用程序启动时自动升级(MigrateDatabaseToLatestVersion 初始值设定项)

    Code First 迁移 如果使用的是 Code First 工作流,推荐使用 Code First 迁移改进应用程序的数据库架构. 迁移提供一组允许以下操作的工具: 创建可用于 EF 模型的初始数 ...