0x00 前言

由于工作需要,最近在学习Go语言,看了网上许多文章,总感觉都些凌乱,故在此总结下环境配置流程,以便后期查看。

0x01 准备

Go语言安装包下载:

开发工具安装包下载:

VSCode下载地址:https://code.visualstudio.com/

Goland 下载地址:https://www.jetbrains.com/go/

0x02 过程

Go语言环境安装

安装过程非常的 so easy !!!

  • 选择适合自己电脑系统的版本下载即可,博主这里选择 Windows 64 位安装包。
https://www.whbwiki.com/wp-content/uploads/2022/04/1649142021-20def7942674282-1024x541.png
  • 默认一直点下一步安装即可
https://www.whbwiki.com/wp-content/uploads/2022/04/1649142270-20def7942674282.png
https://www.whbwiki.com/wp-content/uploads/2022/04/1649142368-20def7942674282.png
  • 验证是否安装成功,成功安装如下图所示
https://www.whbwiki.com/wp-content/uploads/2022/04/1649143054-20def7942674282.png

VSCode 安装

一般使用 VSCode 其实就可以满足大部分Go项目开发,无需再安装Goland

  • 选择适合自己电脑系统的版本下载即可,博主这里选择 Windows 64 位安装包。
https://www.whbwiki.com/wp-content/uploads/2022/04/1649143342-20def7942674282.png
  • 默认一直点下一步安装即可

Goland 安装

Goland 是 收费 软件,网上有流传破解免费版本,请自行甄别使用,博主推荐正版

  • 选择适合自己电脑系统的版本下载即可,博主这里选择 Windows 64 位安装包。
https://www.whbwiki.com/wp-content/uploads/2022/04/1649143981-20def7942674282-1024x481.png
  • 默认一直点下一步安装即可

0x03 代理

GOPROXY 配置

由于Go默认源是国外的,不会翻墙的话许多依赖包无法下载,故配置 GOPROXY 为 国内源,方便下载

  • 直接命令行依次运行下面两条命令即可
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

0x04 项目

GOPATH

  • GOPATH是早期的设置方式,将工作目录设置GOPATH到全局环境变量。目录结构如下图:
bin/
    hello                          # command executable
    outyet                         # command executable
src/
    github.com/golang/example/
        .git/                      # Git repository metadata
	hello/
	    hello.go               # command source
	outyet/
	    main.go                # command source
	    main_test.go           # test source
	stringutil/
	    reverse.go             # package source
	    reverse_test.go        # test source
    golang.org/x/image/
        .git/                      # Git repository metadata
	bmp/
	    reader.go              # package source
	    writer.go              # package source
    ... (many more repositories and packages omitted) ...

缺点:

  1. 所有的项目都在 GOPATH/src/ 下。很显然这种设置方法是不太方便的,因为不同项目引用的package到放到了一起,这用git管理起来很麻烦,比如A项目引用了a,b两个package,B项目引用了c,d两个package,那么如果我在A中修改了package的内容,我提交A项目时想要带着package时就很麻烦。
  2. GOPATH 需要设置全局环境变量,很多新手在对这些不熟悉的时候,很容易出错。项目名也必须不同。否则无法区分。

GO mod

  • go mod 正是为了解决上述问题(并不单单是上述问题,还有依赖引用问题)。在1.13以后开始推行。因为没多长时间,所以现在网络上的教程两种版本的都有,很容易混淆。
  • go mod可以完全替代GOPATH设置 。只需通过 go env -w GO111MODULE=on 开启 go mod。
bin/
    hello                          # command executable
    outyet                         # command executable
src/
    myproject/server.go
  • 进入到myproject 执行 go mod init myproject
  • 就会创建出一个go.mod文件。只需要一个go mod文件就可以管理包依赖。项目管理也会更加方便。

GO 项目结构

不论采用何种编程语言,良好的项目组织结构都至关重要,因为这将直接影响项目内部依赖的复杂程度以及项目对外提供 API 等服务的灵活性等。最好在项目初期便制定好项目结构约定,甚至可以为其开发脚手架之类的工具来生成项目模板,让开发者尽量按照统一的规范参与项目。

1.应用项目常见布局

一个常见的 Go 应用项目布局,通常有如下结构:

https://www.whbwiki.com/wp-content/uploads/2022/04/1649150051-20def7942674282.png

cmd/

  • cmd 包是项目的主干,是编译构建的入口,main 文件通常放置在此处。一个典型的 cmd 包的目录结构如下所示:
https://www.whbwiki.com/wp-content/uploads/2022/04/1649150265-20def7942674282.png
  • 从上述例子可以看出,cmd 下可以允许挂载多个需要编译的应用,只需要在不同的包下编写 main 文件即可。需要注意的是,cmd 中的代码应该尽量「保持简洁」,main 函数中可能仅仅是参数初始化、配置加载、服务启动的操作。

pkg/

  • pkg 中存放的是可供项目内部/外部所使用的公共性代码,例如:用来连接第三方服务的 client 代码等。也有部分项目将该包命名为 lib。

internal/

  • internal 包主要用处在于提供一个项目级别的代码保护方式,存放在其中的代码仅供项目内部使用。具体使用的规则是:…/a/b/c/internal/d/e/f 仅仅可以被…/a/b/c下的目录导入,…/a/b/g则不允许。internal 是 Go 1.4 版本中引入的特性,更多信息可以参考这里
  • 在 internal 内部可以继续通过命名对目录的共享范围做区分,例如 internal/myapp 表示该目录下的代码是供 myapp 应用使用的;internal/pkg 表示该目录下的代码是可以供项目内多个应用使用的。

go.mod && go.sum

  • go.mod 与 go.sum 是采用 go modules 进行依赖管理所生成的配置文件。go modules 是 Go 1.11 版本中引入的版本管理功能,目前已经是 go 依赖管理的主流方式,所以此处不再讨论 vendor,dep 等依赖管理方式所生成的目录。

Makefile

  • Makefile 文件通常存放项目的编译部署脚本。Go 的编译命令虽然简单,但总是手写命令还是效率低下,因此使用 Makefile 写编译部署脚本是工程实践中常见的方式。

2.工具包项目常见布局

工具包项目通常也叫 kit 项目,包含公司的公共依赖库,在 https://github.com/ardanlabs/kit 中给出了一个 kit 项目布局示例:

https://www.whbwiki.com/wp-content/uploads/2022/04/1649150917-20def7942674282.png

kit 项目有以下几个特点:

(1)建议公司只有「一个」 kit 项目,kit 包含的是供公司多个项目使用的基础库,提供非常具体但是基本的功能。

(2)建议 kit 项目不要依赖第三方库版本,即 kit 中不要包含 vendor, go modules 等版本管理信息。kit 本质是基础工具包,如果内部含有 vendor 等版本管理,那么就要随着第三方库的更新而不断更新,导致上层依赖 kit 的应用也得随之更新,变更代价很大。

3. 其他

  • 项目中不应该包含 src 目录
  • 在 Java 项目中,会常见 src 目录,但在 Go 项目中,并不推荐这么做。在 Go 1.11 之前,Go 项目是放在 $GOPATH/src 下,如果项目中再包含 src 目录,那么代码结构就会类似: `$GOPATH/src/my-project/src/app.go` 的结构,容易造成混淆。在 Go 引入 modules 之后,项目可以不用写在 $GOPATH 下,但是依然不推荐项目中采用 `src` 来命名目录。

VSCode 项目配置

  • 安装Go语言插件
https://www.whbwiki.com/wp-content/uploads/2022/04/1649149072-20def7942674282-1024x223.png
  • 新建一个项目,项目结构和代码如下,进入MyProject文件夹,执行 go mod init MyProject 生成 go.mod 文件
https://www.whbwiki.com/wp-content/uploads/2022/04/1649152631-20def7942674282.png
package main

import (
	"MyProject/test"
	"fmt"
)

func main() {
	fmt.Println("hello word")
	fmt.Println(test.Add(1, 1))
}
package test

func Add(x, y int) int { // 首字母大写表示公有方法
	return x + y
}
  • 第一次使用VSCode写GO会提示安装插件,点击安装即可,若安装失败,请检查 GOPROXY 是否配置为国内源
https://www.whbwiki.com/wp-content/uploads/2022/04/1649150323-20def7942674282-1024x465.png
  • 编译运行项目 go run 或 go build 再运行 都正常
https://www.whbwiki.com/wp-content/uploads/2022/04/1649152843-20def7942674282-1024x700.png

Goland 项目配置

  • 打开Goland ,新建项目
https://www.whbwiki.com/wp-content/uploads/2022/04/1649153231-20def7942674282.png
  • 使用Goland IDE 新建项目后,自动为我们生成了go.mod文件,无需我们手动生成
https://www.whbwiki.com/wp-content/uploads/2022/04/1649153392-20def7942674282-1024x559.png
  • 创建一个相同的项目,编译运行项目 go run 或 go build 再运行 都正常
https://www.whbwiki.com/wp-content/uploads/2022/04/1649153466-20def7942674282-1024x701.png

0x05 结束

至此,Go开发环境配置就结束了,终于可以愉快的敲代码了。