Go语言1.14版本之后推荐使用go modules管理以来,也不再需要把代码写在GOPATH目录下了。
下载
下载地址:https://golang.google.cn/dl/(Go官方镜像站)
安装
windows安装(以win10为例)
以默认路径一路点击下一步即可,打开终端窗口,输入go version命令,查看安装的Go版本。Linux下安装
wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz
mkdir -p /usr/local/go # 创建目录
tar -C /usr/local/go -zxf go1.11.5.linux-amd64.tar.gz. # 解压
配置环境变量
: Linux下有两个文件可以配置环境变量,其中/etc/profile是对所有用户生效的;$HOME/.profile是对当前用户生效的,根据自己的情况自行选择一个文件打开,添加如下两行代码,保存退出。
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
修改/etc/profile后要重启生效,修改HOME/.profile文件即可生效。 检查:
go version
- Docker下安装
docker pull golang
或者可以自己编写dockerfile自己构建自己的golang镜像,以下dockerfile为简单的示范:
FROM ubuntu:16.04
MAINTAINER yourname "youuremail@163.com"
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 换国内源和安装wget
RUN sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list \
&& sed -i "s/security.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list \
&& apt-get clean \
&& apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*
# 配置环境变量
ENV GOPATH=/go
ENV GO111MODULE=on
ENV GOROOT=/usr/local/go
ENV GOPROXY=https://goproxy.cn,direct
ENV PATH=$PATH:$GOROOT/bin:$GOPATH/bin
RUN wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz \
# 创建目录
&& mkdir -p /go \
\
# 安装和配置
&& tar -C /usr/local -zxf go1.14.linux-amd64.tar.gz \
\
# 删除安装包
&& rm -rf go1.14.linux-amd64.tar.gz
# WORKDIR
WORKDIR /go
通过以下命令来构建
cp dockerfile /test # 将dockerfile拷贝进/test
cd /test # 进入dockerfile所在目录
docker build -t golang:v1.0 . # 构建镜像
docker images #查看镜像
GOROOT和GOPATH
GOROOT和GOPATH都是环境变量,其中GOROOT是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为GOPATH设置一个默认目录,参见下表。
平台 | GOPATH默认值 | 举例 |
---|---|---|
Unix | $HOME/go | /home/用户名/go |
windows | %USERPROFILE%/go | C:\Users\用户名\go |
我们只需要记住默认的GOPATH路径在哪里就可以了。
我们需要将 GOROOT下的bin目录及GOPATH下的bin目录都添加到环境变量中!才可以全局执行命令
注:配置环境变量之后需要重启你电脑上已经打开的终端。
开启go module
Go 1.13 后已经默认开启 go mod 了!
unix:
export GO111MODULE=on
windows:
set GO111MODULE=on
go mod命令
// 下载依赖到本地缓存,查看GOCACHE缓存地址
go mod download
// 把模块之间的依赖图显示出来
go mod graph
// 当前目录初始化和创建`go.mod`文件,最好是项目名
go mod init [模块名]
// 添加确实模块和移除不必要的模块
go mod tidy -v
// 当前目录下生产vendor目录,包含所有依赖包
go mod vendor -v
// 检查当前模块的依赖是否已经存储在本地下载的源代码缓存中
go mod verify
// 依赖module下的vendor生成可执行文件
go build -mod=vendor
// 更新稳定版依赖
go get rsc.io/sampler
GOPROXY
默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct,由于国内访问不到https://proxy.golang.org,所以需要换一个PROXY,这里推荐使用https://goproxy.io或https://goproxy.cn。也可以去阿里云Go Module代理仓库服务查看https://mirrors.aliyun.com/goproxy/
可以执行下面的命令修改GOPROXY:
go env -w GOPROXY=https://goproxy.cn,direct
配置Goland
- File -> Settings -> Go -> GOPATH:
配置路径 - File -> Settings -> Go -> GOROOT:
配置路径 - File -> Settings -> Go -> Go Modules(vgo):
(1) 勾选enable go modules(vgo) integration
(2) 设置Proxy为 https://goproxy.cn
使用go mod 管理项目
使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,可以在磁盘的任何位置新建一个项目
- 新建一个名为 test 的项目,项目路径 D:\test (注意,该路径并不在GOPATH里)。
- 进入项目目录 D:\test 里,新建一个 go源码文件:main.go。
- 然后在 D:\test 里打开终端执行命令:go mod init test (go mod init [模块名,最好是项目名],我这里叫test)
看到提示 “go: creating new go.mod: module wserver” 说明 go mod 初始化成功了,会在当前目录下生成一个 go.mod 文件,包含go.mod文件的目录也被称为模块根,也就是说,go.mod 文件的出现定义了它所在的目录为一个模块。
- 执行上述命令之后,其实已经可以开发编译运行此项目了,比如随便使用github上的一个包,在终端打印一下
package main
import (
"fmt"
"github.com/jinzhu/configor"
)
func main() {
fmt.Println("使用外部包测试:", configor.config{})
}
运行一下,会看到输出结果: { false false false} ,同时项目目录下多出了一个文件 go.sum 。go.sum 是记录所依赖的项目的版本的锁定。
- 现在再建一个项目内的包 route (和main.go同级),在 main.go 里如果需要使用这个包,需要使用这个包的 模块内的
绝对路径
来导入,比如:
package main
import (
"fmt"
"test/route"
"github.com/jinzhu/configor"
)
func main() {
fmt.Println("使用项目内包测试:", route.Name{})
fmt.Println("使用外部包测试:", configor.config{})
}
"test/route" 导入这个包的地方是 模块内的绝对路径,就是要从go.mod所在的目录开始。
另外,如果我们想把这个项目放到GOPATH下面,不使用go mod模式,而是想使用GOPATH模式的话,,只需要把这个项目移到GOPATH环境变量包含的任意一个目录下面的src目录里,就可以启用GOPATH模式了(前提是 GO111MODULE 这个环境变量的值必须是auto 或 off)。
参考:
https://www.jianshu.com/p/bbed916d16ea
https://www.liwenzhou.com/posts/Go/install_go_dev/