zoukankan      html  css  js  c++  java
  • Go 语言基础之环境搭建

    Go 语言安装

    下载

    官网下载地址:https://golang.org/dl/

    国内下载:https://studygolang.com/dl

    Windows 平台和 Mac 平台推荐下载可执行文件版,Linux 平台下载压缩文件版。

    Windows 下载可执行文件版,按照提示一步步安装即可,默认安装路径是C:\Program Files\Go\

    安装完毕后,在命令行中使用go version命令可以查看安装的版本:

    > go version
    go version go1.17.4 windows/amd64
    

    使用go env命令可以查看安装的环境变量:

    > go env
    set GO111MODULE=
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\xxx\AppData\Local\go-build
    set GOENV=C:\Users\xxx\AppData\Roaming\go\env
    set GOEXE=.exe
    set GOEXPERIMENT=
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=C:\Users\xxx\go\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=C:\Users\xxx\go
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct
    set GOROOT=D:\Program Files\Go
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=D:\Program Files\Go\pkg\tool\windows_amd64
    set GOVCS=
    set GOVERSION=go1.17.4
    set GCCGO=gccgo
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=NUL
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\HUANGZ~1\AppData\Local\Temp\go-build2615393086=/tmp/go-build -gno-record-gcc-switches
    

    其中,GOROOT环境变量是 Go 源代码的安装目录。除此之外,我们还需要关注GOPATHGO111MODULEGOPROXY这三个变量。


    配置 GOPATH

    GOROOT是 Go 源代码的安装路径,而GOPATH是项目程序存放的目录。从Go 1.8版本开始,Go 可执行文件版在安装时会为GOPATH设置一个默认目录,并且在Go 1.14及之后的版本中启用了Go Module模式之后,不一定非要将项目程序写到GOPATH目录下。

    Go Module版本管理方式出现之前,开发者创建的项目程序一般都存放在$GOPATH/src目录下,使用go get命令下载的第三方依赖也会存放在这个目录下。GOPATH目录结构一般会有三个子目录:

    • bin:编译后的可执行文件
    • pkg:编译时生成的对象文件
    • src:库文件

    这种依赖于GOPATH环境变量的设置在Go Module版本管理出现之后逐渐被摒弃。在Go Module方式下,开发者可以在任意目录下创建子目录作为项目程序的目录,使用的第三方依赖会下载到$GOPATH/pkg/mod目录下。

    如果不想使用默认路径作为GOAPTH目录,需要对 Windows 的GOPATH环境变量进行修改:


    开启 Go Module

    Go Module默认是不开启的,且GOPROXY默认配置拉取依赖网址是https://proxy.golang.org,direct,国内是访问不到该网址,所以我们需要换一个 PROXY,推荐使用https://goproxy.iohttps://goproxy.cn。执行下面的命令进行修改:

    $ go env -w GO111MODULE=on
    $ go env -w GOPROXY=https://goproxy.cn,direct
    

    GO111MODULE有三个可选值:off、on、auto,默认值是 auto。

    • GO111MODULE=off:禁用模块支持,编译时会从GOPATH和 vendor 文件夹中查找包。

    • GO111MODULE=on:启用模块支持,编译时会忽略GOPATH和 vendor 文件夹,只根据go.mod下载依赖。

    • GO111MODULE=auto:当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持。

    vender 机制是Go1.5版本之后开始支持,能够控制 Go 语言程序编译时依赖包搜索路径的优先级。在查找项目的某个依赖包时,首先会在项目根目录下的 vender 文件夹中查找,如果没有找到才会去$GOAPTH/src目录下查找。


    Goland 配置

    创建项目


    安装 go fmt 和 go imports

    go imports安装前需要先使用go get命令第三方下载:

    go get -u golang.org/x/tools/cmd/goimports
    
    • go fmt:保存的时候自动格式化 Go 代码;
    • go imports:保存的时候自动导入处理包。

    go mod 命令

    ☕️ 常用的go mod命令

    • 初始化一个文件夹,创建go.mod文件
    go mod init
    go mod init 模块名
    
    • 下载依赖的 module 到本地 cache(默认为$GOPATH/pkg/mod
    go mod download
    
    • 编辑go.mod文件,选项有-json-require-exclude,可以使用帮助go help mod edit
    go mod edit
    
    • 以文本模式打印模块需求图
    go mod graph
    
    • 增加缺少的 module,删除无用的 module
    go mod tidy
    
    • 将依赖复制到 vendor 下
    go mod vendor
    
    • 验证依赖是否正确
    go mod verify
    
    • 解释为什么需要依赖
    go mod why
    

    ⭐️ go.mod格式

    go.mod文件记录了项目所有的依赖信息,其结构大致如下:

    module github.com/Q1mi/studygo/blogger
    
    go 1.12
    
    require (
        github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
        github.com/gin-gonic/gin v1.4.0
        github.com/go-sql-driver/mysql v1.4.1
        github.com/jmoiron/sqlx v1.2.0
        github.com/satori/go.uuid v1.2.0
        google.golang.org/appengine v1.6.1 // indirect
    )
    

    其中,module 用来定义包名,require 用来定义依赖包及版本,indirect 表示间接引用。

    go mod支持语义化版本号,比如go get foo@v1.2.3,也可以跟 git 的分支或 tag,比如go get foo@master,当然也可以跟 git 提交哈希,比如go get foo@e3702bed2。关于依赖的版本支持以下几种格式:

    gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
    gopkg.in/vmihailenco/msgpack.v2 v2.9.1
    gopkg.in/yaml.v2 <=v2.2.1
    github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
    latest
    

    在国内访问golang.org/x的各个包都需要FQ,可以在go.mod中使用 replace 替换成 github 上对应的库。

    replace (
        golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
        golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
        golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
    )
    

    go get 命令

    在项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。

    • 运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z,z 是修订版本号,y 是次要版本号)

    • 运行go get -u=patch将会升级到最新的修订版本

    • 运行go get package@version将会升级到指定的版本号 version

    如果下载所有依赖最好使用go mod download命令。具体使用如下:

    • 下载项目依赖
    go get ./...
    
    • 拉取最新的版本(优先择取 tag)
    go get golang.org/x/text@latest
    
    • 拉取 master 分支的最新 commit
    go get golang.org/x/text@master
    
    • 拉取 tag 为 v0.3.2 的 commit
    go get golang.org/x/text@v0.3.2
    
    • 拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2:
    go get golang.org/x/text@342b2e
    
    • 指定版本拉取,拉取 v3 版本
    go get github.com/smartwalle/alipay/v3
    
    • 更新
    go get -u github.com/gin-gonic/gin
    

    一般来说,如果不使用go get package@version命令拉取依赖,最好使用go get -u命令去拉取。go get命令只会拉取本地没有的依赖,如果依赖存在就什么都不做;go get -u命令会在本地依赖存在的情况下将其版本进行更新,没有就去拉取依赖。


    参考

    1. Go语言之依赖管理
    2. 三分钟掌握Go mod常用与高级操作
    3. go get 加 -u 和不加 -u 参数的区别
  • 相关阅读:
    【BZOJ3489】A simple rmq problem【kd树】
    【BZOJ2716】天使玩偶【kd树】
    Codeforces Round #520 (Div. 2)
    Codeforces Round #521 (Div. 3)
    Educational Codeforces Round 54
    【hdu3507】Print Article 【斜率优化dp】
    【HDU5992】Finding Hotels 【KD树】
    【hdu4347】The Closest M Points 【KD树模板】
    【BZOJ2806】Cheat 【广义后缀自动机+单调队列优化dp+二分】
    SDSC2018 Day1
  • 原文地址:https://www.cnblogs.com/zongmin/p/15656783.html
Copyright © 2011-2022 走看看