搭建Go语言开发环境

Go语言1.14版本之后推荐使用go modules管理以来,也不再需要把代码写在GOPATH目录下了。

下载

下载地址:https://golang.google.cn/dl/(Go官方镜像站)

安装

  1. windows安装(以win10为例)
    以默认路径一路点击下一步即可,打开终端窗口,输入go version命令,查看安装的Go版本。

  2. 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后使用source命令加载HOME/.profile文件即可生效。 检查:

go version
  1. 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.iohttps://goproxy.cn。也可以去阿里云Go Module代理仓库服务查看https://mirrors.aliyun.com/goproxy/

可以执行下面的命令修改GOPROXY:

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

配置Goland

  1. File -> Settings -> Go -> GOPATH:
    配置路径
  2. File -> Settings -> Go -> GOROOT:
    配置路径
  3. File -> Settings -> Go -> Go Modules(vgo):
    (1) 勾选enable go modules(vgo) integration
    (2) 设置Proxy为 https://goproxy.cn

使用go mod 管理项目

使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,可以在磁盘的任何位置新建一个项目

  1. 新建一个名为 test 的项目,项目路径 D:\test (注意,该路径并不在GOPATH里)。
  2. 进入项目目录 D:\test 里,新建一个 go源码文件:main.go。
  3. 然后在 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 文件的出现定义了它所在的目录为一个模块。
  4. 执行上述命令之后,其实已经可以开发编译运行此项目了,比如随便使用github上的一个包,在终端打印一下
package main

import (
    "fmt"
    "github.com/jinzhu/configor"
)

func main()  {
    fmt.Println("使用外部包测试:", configor.config{})
}

运行一下,会看到输出结果: { false false false} ,同时项目目录下多出了一个文件 go.sum 。go.sum 是记录所依赖的项目的版本的锁定。

  1. 现在再建一个项目内的包 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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容