# 1.1 一文搞定开发环境的搭建
## 1. 下载安装 Go语言
下载地址:https://golang.google.cn/dl/

下载完成后,直接双击 msi 文件进行安装,我习惯将软件安装在我的 E 盘下的 `Program Files` 目录下

后面就是一路点击 `Next` 即可,直到出现如下界面,安装完成。

## 2. 配置 Goland 环境
学习编程语言,使用一个称心的 IDE,可以帮你省去很多麻烦。
开发 Python 项目,我习惯使用 PyCharm,因为已经习惯了 JetBrains 风格的IDE,可以替我省去很多熟悉新IDE的成本,所以这里我照样使用 JetBrains 专门为 Go语言开发的IDE:`Goland`。
Goland 没有像 PyCharm 那样搞一个免费社区版,它是需要付费的。
网上的PJ教程几乎都不能用了,幸好我这里有绿色免安装的版本,对,就是那种连安装都不用安装,下载解压后就能使用的专业版本。
当你的可以正常使用 Goland 后,通过点击设置进入如下界面,创建我的项目目录,顺便设置好 GOROOT 。

创建好Project后,再点击 Files->Settings->GOPATH,添加我们的项目目录` F:\Go-Player`

随便点击一个go文件,就能在下图箭头处看到配置入口,点击进入配置一下 Go运行器。

按照如下指示进行配置。

去掉参数提示

设置 goproxy

可先的代理有如下(注意后面的 direct 不要删除)
- `https://goproxy.io`
- `https://goproxy.cn`
- `https://mirrors.aliyun.com/goproxy/`
设置 goimports(自动格式化插件),如果 你之前 没有安装 ,会提示你点击 `yes` 下载安装 。

至此,环境配置完成。
在项目根目录下,创建如下三个文件夹,并在 src 目录下创建一个hello.go 的文件。

点击运行按钮,在控制台我们看到了熟悉的 `Hello, World!`

## 3. 配置 VS Code 环境
提前设置用户级的环境变量
```
GOPATH = F:\Go-Player
PATH = %GOPATH%\bin # 以追加的方式
```
昨天评论区有人问,GOPATH 和 GOROOT 是什么?为什么需要设置?回想一下 你学 Python 的话,安装 Python 解释器的时候,是不是也要设置环境变量?这里也是类似。
GOROOT :在GO语言中表示的是 Go语言编译、工具、标准库等的安装路径,通过它可以告诉系统你的 go.exe 是放在哪里,不设置的话,你后面执行 `go get` 、`go install` 的时候,系统就不认识它了。
而 GOPATH环境变量则表示 Go的工作目录,这个目录指定了需要从哪个地方寻找GO的包、可执行程序等,这个目录可以是多个目录表示。这里我设置成我的工作空间(目录你可以自己定) :`F:\Go-Player`,如果不设置的话 ,默认是在你的用户目录下的 go 文件夹。
这时要再说一点,GO 项目中,一般来说它的工作目录结构是这样的:
- bin目录:包含了可执行程序,注意是可执行的,不需要解释执行。
- pkg目录:包含了使用的包或者说库。
- src目录:里面包含了go的代码源文件,其中仍按包的不同进行组织。
所以后面我的创建的GO工作目录,也是按照这个标准来,先说明一下。
接下来,要开始配置 VS Code 环境。
打开你的 VS Code软件,先确认你设置的环境变量已经生效,点击 `Terminal` -> `New Terminal`,使用 cmd 命令查看环境变量。

如上图所求,我的环境变量是OK的,如果你的输出是指向你的用户目录:`%USERPROFILE%\go` 建议你不要折腾(因为我无论重启多少次 VS Code,其记录的GOPATH始终指向%USERPROFILE%\go), 直接重启你的电脑。
好了之后,我们要从 github 上下载两个仓库,之所以要手动下载,是因为有墙的存在,在线安装的话,很多插件你会下载失败。
创建目录 `src/goland.org/x/`,并进入此目录,执行命令
```shell
$ git clone https://github.com/golang/tools.git
$ git clone https://github.com/golang/lint.git
```
点击 `File` - `Open Folder` 安装两个插件:
第一个是:Go 语言的扩展插件

第二个是:Code Runner,让你的 VS Code 能够编译运行 Go 的程序。

随便点开一个 go 文件,在你的右下角会提示要你安装一些工具,安装的包有些由于墙的原因,无法下载,为了保证下载顺利,可以设置一下代理。
```shell
$ go env -w GOPROXY=https://goproxy.cn,direct
```
然后再点击 `Install All`

然后你在 OUTPUT 就能看到安装进度

安装的 exe 文件会放在 %GOPATH%/bin 下,也就是 `F:\Go-Player\bin`

而此的 src 目录结构是这样的

到这时环境配置完成,编写 HelloWorld,并运行查看输出,一切完成。

## 4. 配置环境变量
当你在终端使用 `go env` 的时候,会打印出go 相关的所有环境变量
```shell
$ go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\wangbm\AppData\Local\go-build
set GOENV=C:\Users\wangbm\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=E:\MING-Code\GoPlayer
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=D:\Program Files (x86)\Go-1.13.6
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=D:\Program Files (x86)\Go-1.13.6\pkg\tool\windows_amd64
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
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
```
想查看几个特定的环境变量就加在 `go env` 后面
```shell
$ go env GOPATH
E:\MING-Code\GoPlayer
$ go env GOROOT
D:\Program Files (x86)\Go-1.13.6
$ go env GOPROXY
https://goproxy.cn,direct
```
以上环境变量很多,这里仅设置下面这两个就足够了
- 一个是GO111MODULE 设置为 on,表示使用 go modules 模式
```shell
$ go env -w GO111MODULE=on
```
- 一个是开启代理,防止下载包失败(前面可能你已经设置过)
```shell
$ go env -w GOPROXY=https://goproxy.cn,direct
```
---
- 第一章:基础知识
- 1.1 一文搞定开发环境的搭建
- 1.2 五种变量创建的方法
- 1.3 数据类型:整型与浮点型
- 1.4 数据类型:byte、rune与字符串
- 1.5 数据类型:数组与切片
- 1.6 数据类型:字典与布尔类型
- 1.7 数据类型:指针
- 1.8 流程控制:if-else
- 1.9 流程控制:switch-case
- 1.10 流程控制:for 循环
- 1.11 流程控制:goto 无条件跳转
- 1.12 流程控制:defer 延迟语句
- 1.13 流程控制:理解 select 用法
- 1.14 异常机制:panic 和 recover
- 1.15 语法规则:理解语句块与作用域
- 第二章:面向对象
- 2.1 面向对象:结构体与继承
- 2.2 面向对象:接口与多态
- 2.3 面向对象:结构体里的 Tag 用法
- 2.4 学习接口:详解类型断言
- 2.5 学习接口:Go 语言中的空接口
- 2.6 学习接口:接口的三个"潜规则"
- 2.7 学习反射:反射三定律
- 2.8 学习反射:全面学习反射的函数
- 2.9 详细图解:静态类型与动态类型
- 2.10 关键字:make 和 new 的区别?
- 第三章:项目管理
- 3.1 依赖管理:包导入很重要的 8 个知识点
- 3.2 依赖管理:超详细解读 Go Modules 应用
- 3.3 开源发布:如何开源自己写的包给别人用?
- 3.4 代码规范:Go语言中编码规范
- 第四章:并发编程
- 4.1 学习 Go 函数:理解 Go 里的函数
- 4.2 学习 Go 协程:goroutine
- 4.3 学习 Go 协程:详解信道/通道
- 4.4 学习 Go 协程:WaitGroup
- 4.5 学习 Go 协程:互斥锁和读写锁
- 4.7 学习 Go 协程: 信道死锁经典错误案例
- 4.7 学习 Go 协程:如何实现一个协程池?
- 4.8 理解 Go 语言中的 Context
- 4.9 学习一些常见的并发模型
- 第五章:学标准库
- 5.1 fmt.Printf 方法详解
- 5.2 os/exec 执行命令的五种姿势
- 第六章:开发技能
- 6.1 Go 命令:go test 工具详解
- 6.2 单元测试:如何进行单元测试?
- 6.3 调试技巧:使用 GDB 调试 Go 程序
- 6.4 Go 命令: Go 命令指南
- 第七章:暂未分类
- 7.1 20 个学习 Go 语言的精品网站
