• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Go 开发环境配置 详细教程


Recommended Posts

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 为 国内源,方便下载

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

0x04 项目

GOPATH

  • GOPATH是早期的设置方式,将工作目录设置GOPATH到全局环境变量。目录结构如下图:
Copy
 
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。
Copy
 
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
Copy
 
package main
 
 
 
import (
 
"MyProject/test"
 
"fmt"
 
)
 
 
 
func main() {
 
fmt.Println("hello word")
 
fmt.Println(test.Add(1, 1))
 
}
 
Copy
 
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开发环境配置就结束了,终于可以愉快的敲代码了。

Link to comment
Share on other sites