zoukankan      html  css  js  c++  java
  • 配置go开发环境 (mod + goland ide)

    go module 使用

    网站guide



    文件下载

    go1.14.2.windows-amd64.zip
    goland IDE
    goland 激活码


    配置 环境变量

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

    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:userXXXgo)
    
    - 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
    ",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:Usershegopkg)

    PS C:UsershegosrcawesomeProject> 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:UsershegosrcawesomeProject>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能查找并更新依赖关系,使用这个选项可以检查依赖关系的变动。
    
    
    
    
    
  • 相关阅读:
    Python开源框架、库、软件和资源大集合
    java常用的框架介绍
    2016年7款最佳 Java 框架
    10款免费开源PHP框架
    10个提升MySQL性能的小技巧
    15个最受欢迎的Python开源框架
    Facebook's React vs AngularJS: A Closer Look
    用c#监控网络状态
    15种主要编程语言介绍及应用场合
    物联网常见通信协议梳理
  • 原文地址:https://www.cnblogs.com/scotth/p/11682063.html
Copyright © 2011-2022 走看看