Skip to content

Commit

Permalink
go developmeng environment preparation docs update
Browse files Browse the repository at this point in the history
  • Loading branch information
gqcn committed Dec 1, 2024
1 parent 5febe12 commit b054e35
Show file tree
Hide file tree
Showing 10 changed files with 91 additions and 100 deletions.
104 changes: 43 additions & 61 deletions docs/docs/其他资料/准备工作/Go Module.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ keywords: [Go Module,GoFrame,包管理工具,依赖管理,go.mod,Goland IDE,vgo,
description: 'Go Module这一包管理工具的使用方法,涵盖了如何通过Goland IDE和命令行进行依赖管理,并提供了设置go.mod文件及使用代理下载GoFrame框架的实用指导。通过开启Go Module特性和选择适当的Proxy地址,能够高效管理项目包依赖,从而提升开发效率。'
---

`Go Module` 是从Go版本 `1.11.1` 开始官方提供的包管理工具,用于解决Go项目的包管理及依赖,类似于PHP的 `composer`Nodejs的 `npm`。本章节会对 `Go Module` 的一些常用的实用的命令/设置进行介绍,更详细的介绍请查看官方文档: [https://github.com/golang/go/wiki/Modules](https://github.com/golang/go/wiki/Modules)
`Go Module` 是从Go版本 `1.11.1` 开始官方提供的包管理工具,用于解决`Go`项目的包管理及依赖,类似于`PHP` `composer``Nodejs` `npm`。本章节会对 `Go Module` 的一些常用的实用的命令/设置进行介绍,更详细的介绍请查看官方文档: [https://github.com/golang/go/wiki/Modules](https://github.com/golang/go/wiki/Modules)

## 关于 `go.mod`

Expand All @@ -16,108 +16,90 @@ description: 'Go Module这一包管理工具的使用方法,涵盖了如何通
1. 当前项目名( `module`)是什么。每个项目都应该设置一个名称,当前项目中的包( `package`)可以使用该名称进行相互调用。
2. 当前项目依赖的第三方包名称。项目运行时会自动分析项目中的代码依赖,生成 `go.sum` 依赖分析结果,随后go编译器会去下载这些第三方包,然后再编译运行。

我们将之前的 `hello world` 项目做一些改变,增加一个 `go.mod` 文件(也可以在项目根目录下使用 `go mod init 项目名称` 命令初始化项目生成该文件),内容如下
我们可以看到之前的 `hello world` 项目下有一个自动生成的 `go.mod` 文件,其内容如下

```go
module my-hello
module hello
```

其中, `my-hello` 为当前项目的名称,可以随意设置。

就这样简单便完成了项目的 `module` 初始化。

一般情况下, `go.sum` 依赖分析文件应当被添加到版本管理中随着 `go.mod` 文件一起提交。
其中, `hello` 为当前项目的名称,在我们初始化项目的时候`Goland IDE`自动帮助我们生成了该文件,默认情况下该`module`的名称为目录的名称,该名称可以随意设置。

## 使用 `go.mod`

使用 `go.mod` 意即用 `go.mod` 进行项目依赖管理。我们有两种 `go.mod`**使用方式**`IDE-vgo``命令行` 方式。以下我们通过下载使用 `GoFrame` 框架来演示如何使用这两种方式来管理依赖。

> 如果需要 `Goland` IDE支持 `go.mod`,必须要打开 `vgo` 的支持(包括代码依赖检测)。这两种使用方式的区别仅仅是下载依赖包的方式不同。

### 使用Goland IDE vgo(推荐)
### 使用Goland IDE

`vgo` 是基于 `Go Module` 规范的包管理工具,同官方的 `go mod` 命令工具类似。
1. 设置 `Goland` 启用 `Go Module`特性

1. 设置 `Goland` 启用 `vgo`
![alt text](QQ_1733020920028.png)

![](/markdown/f3f9552ca0703fb4e88ae2958b58815c.png)
在下载第三方依赖包时,您需要科学上网。笔者本地设置了一个环境变量`GOPROXY`用于科学上网拉取依赖:

如果您本地环境已经有 `VPN` 功能,那么可以忽略 `proxy` 的设置。
```bash
GOPROXY=https://goproxy.cn
```

其中 `Proxy` 请输入代理地址下载依赖包,如果选择 `direct` 表示不使用代理。可选择的反向代理地址有:
如果您本地环境已经有 `VPN` 功能,那么可以忽略 `GOPROXY` 的设置,可以添加`direct` 后缀表示不使用代理。
```bash
GOPROXY=https://goproxy.cn,direct
```


- `https://goproxy.cn`
- `https://goproxy.io`
- `https://mirrors.aliyun.com/goproxy/`
其中 `GOPROXY` 请输入代理地址下载依赖包,常见的`GOPROXY`反向代理地址有:

详见Go官网说明: [https://github.com/golang/go/wiki/Modules#are-there-always-on-module-repositories-and-enterprise-proxies](https://github.com/golang/go/wiki/Modules#are-there-always-on-module-repositories-and-enterprise-proxies)
- `https://goproxy.cn`
- `https://goproxy.io`
- `https://mirrors.aliyun.com/goproxy/`

这里请务必选择一个代理地址输入。
详见Go官网说明: [https://github.com/golang/go/wiki/Modules#are-there-always-on-module-repositories-and-enterprise-proxies](https://github.com/golang/go/wiki/Modules#are-there-always-on-module-repositories-and-enterprise-proxies)


2. 手动修改 `go.mod` 文件如下:

```go
module my-hello

```go
module hello

require github.com/gogf/gf latest
```

增加 `GoFrame` 框架的依赖,其中 `latest` 表示使用最新版本,IDE将会立即去更新下载框架代码。成功后,IDE将会修改 `go.mod` 文件并生成 `go.sum` 依赖分析文件。
require github.com/gogf/gf/v2 latest
```

![](/markdown/cb698537b6d68707fb4c1284530d9f90.png)
增加 `GoFrame` 框架的依赖,其中 `latest` 表示使用`github.com/gogf/gf/v2`最新版本,`IDE`将会立即去更新下载框架代码。成功后,`IDE`将会修改 `go.mod` 文件并生成 `go.sum` 依赖分析文件。该`go.sum`文件为该项目所有的第三方依赖,通常也应该推送到版本管理仓库中。

3. 随后 `go.mod` 文件被自动更新为:

```go
module my-hello
```go
module hello

require github.com/gogf/gf/v2 v2.8.1
```

require github.com/gogf/gf v1.6.13
```

其中 `v1.6.13` 表示vgo检测到的最新框架版本。

4. 如果下载最新代码框架后出现下图情况: [https://www.jetbrains.com/help/go/create-a-project-with-vgo-integration.html](https://www.jetbrains.com/help/go/create-a-project-with-vgo-integration.html)

![](/markdown/6c6bad791c9e0eee3c740f9cda0ea5c4.png)

5. 请按快捷键 `⌥(option)+↩(return)` 或者 鼠标右键, 选择 `Sync packages of my-hello`

![](/markdown/cf02717043547f5e1bf0a14b31d40b1c.png)

6. 随后等待几秒钟之后, 可以看到左侧的 `Go Module` 已经有内容,并且中终端自动输出了下载的框架版本

![](/markdown/955367cd46f617411d664c5baa8af9ce.png)
其中 `v2.8.1` 表示`Go Module`检测到的最新框架版本。


### 使用命令行

1. 打开 `Terminal`,在项目根目录下执行:

```bash
export GO111MODULE=on GOPROXY=https://goproxy.cn; go get -u github.com/gogf/gf
```
```bash
export GO111MODULE=on GOPROXY=https://goproxy.cn; go get -u github.com/gogf/gf/v2
```

该命令将会立即下载最新稳定版本的 `GoFrame` 框架。其中 `export GO111MODULE=on;` 表示开启 `Go Module` 特性(Go `1.11.x` 版本默认关闭,需要手动开启), `export GOPROXY=https://goproxy.cn` 表示使用代理下载,原因你懂的,并且也能极大提高依赖包下载速度。代理地址也可使用:
该命令将会立即下载最新稳定版本的 `GoFrame` 框架。其中 `export GO111MODULE=on;` 表示开启 `Go Module` 特性(Go `1.11.x` 版本默认关闭,需要手动开启), `export GOPROXY=https://goproxy.cn` 表示使用代理下载,原因你懂的,并且也能极大提高依赖包下载速度。代理地址也可使用:


- `https://goproxy.cn`
- `https://goproxy.io`
- `https://mirrors.aliyun.com/goproxy`
- `https://goproxy.cn`
- `https://goproxy.io`
- `https://mirrors.aliyun.com/goproxy`

![](/markdown/2274104a3ec3a6d2ac7ea35ad374c85c.png)

2. 随后 `go.mod` 文件内容被自动更新为:

```go
module my-hello
```go
module hello


require github.com/gogf/gf v1.6.13 // indirect
```
require github.com/gogf/gf/v2 v2.8.1
```

且生成了新的 `go.sum` 依赖分析文件,该文件充其量算是一个临时文件,对于我们平时开发工作来说意义不大
且生成了新的 `go.sum` 依赖分析文件。


Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
61 changes: 35 additions & 26 deletions docs/docs/其他资料/准备工作/开发环境配置.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,33 +9,35 @@ description: '在GoFrame框架下开发环境的配置,主要包括Go语言的

## Go环境变量

为方便开发,在开发环境往往需要设置三个环境变量
为方便开发,在开发环境往往需要设置三个环境变量:

1. `$GOROOT``go` 的安装目录,配置后不会再更改
2. `$GOPATH``go` 项目在本地的开发环境的的项目根路径(以便项目编译, `go build`, `go install`),不同的项目在编译的时候该环境变量可以不同
3. `$PATH`(重要):需要将 `go``bin` 目录添加到系统 `$PATH` 中以便方便使用go的相关命令,配置后也不会再更改
1. `$GOROOT``go` 的安装目录,配置后不会再更改;
2. `$GOPATH``go` 项目在本地的开发环境的的项目根路径(以便项目编译, `go build`, `go install`),不同的项目在编译的时候该环境变量可以不同;
3. `$PATH`(重要):需要将 `go``bin` 目录添加到系统 `$PATH` 中以便方便使用go的相关命令,配置后也不会再更改;

Go的环境变量在官方文档中也有详情的说明,请参考链接: [https://golang.google.cn/doc/install/source](https://golang.google.cn/doc/install/source)
`Go`的环境变量在官方文档中也有详情的说明,请参考链接: [https://golang.google.cn/doc/install/source](https://golang.google.cn/doc/install/source)

> 环境变量中的 `$GOOS``$GOARCH` 是比较实用的两个变量,可以用在不同平台的交叉编译中,只需要在 `go build` 之前设置这两个变量即可,这也是go语言的优势之一:可以编译生成跨平台运行的可执行文件。感觉比QT更高效更轻量级,虽然生成的可执行文件是大了一点,不过也在可接受的范围之内。 例如,在 `Linux amd64` 架构下编译 `Windows x86` 的可执行文件,可以使用如下命令:
>
> ```
> CGO_ENABLED=0 GOOS=windows GOARCH=386 go build hello.go
> ```
>
> 遗憾的是交叉编译暂不支持 `cgo` 方式,因此需要将环境变量 `$CGO_ENABLED` 设置为0,这样执行之后会在当前目录生成一个 `hello.exe` 的 `windows x86` 架构的可执行文件。
:::tip
环境变量中的 `$GOOS``$GOARCH` 是比较实用的两个变量,可以用在不同平台的交叉编译中,只需要在 `go build` 之前设置这两个变量即可,这也是`Go`语言的优势之一:可以编译生成跨平台运行的可执行文件。例如,在 `Linux amd64` 架构下编译 `Windows x86` 的可执行文件,可以使用如下命令:

```
CGO_ENABLED=0 GOOS=windows GOARCH=386 go build hello.go
```

遗憾的是交叉编译暂不支持 `cgo` 方式,因此需要将环境变量 `$CGO_ENABLED` 设置为`0`,这样执行之后会在当前目录生成一个 `hello.exe``windows x86` 架构的可执行文件。
:::

### 环境变量设置

除了 `$PATH` 环境外,其他环境变量都是可选的。

为什么说这个步骤可选呢?因为未来的 `Go` 版本慢慢开始移除对 `$GOPATH`/ `$GOROOT` 的支持。此外,在 `Goland` 这个IDE中集成有 `Terminal` 功能,直接使用这个功能中已经设置好了环境变量。
为什么说这个步骤可选呢?因为未来的 `Go` 版本慢慢开始移除对 `$GOPATH`/ `$GOROOT` 的支持。此外,在 `Goland` 这个`IDE`中集成有 `Terminal` 功能,直接使用这个功能中已经设置好了环境变量。

![](/markdown/ba5f3276cff792caf62056ba0ee5987d.png)
![alt text](QQ_1733023014586.png)

### `*nix` 下设置环境变量

在 `*nix` 系统下( `Linux/Unix/MacOS/*BSD` 等等),需要在 `/etc/profile` 中增加以下环境变量设置后,执行命令 `#source /etc/profile` 重新加载profile配置文件(或重新登录),将以下变量添加到用户的环境变量中:
`*nix` 系统下(`Linux/Unix/MacOS/*BSD` 等等),需要在 `/etc/profile` 中增加以下环境变量设置后,执行命令 `#source /etc/profile` 重新加载profile配置文件(或重新登录),将以下变量添加到用户的环境变量中:

```bash
export GOROOT=/usr/local/go
Expand All @@ -45,7 +47,7 @@ export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

### `Windows` 下设置环境变量

Windows如何修改系统环境变量,以及修改环境变量 `PATH`,请参考网上教程( [百度](https://www.baidu.com/s?wd=Windows%20%E4%BF%AE%E6%94%B9%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%20PATH)[Google](https://www.google.com/search?q=Windows+修改系统环境变量+PATH))。
`Windows`如何修改系统环境变量,以及修改环境变量 `PATH`,请参考网上教程( [百度](https://www.baidu.com/s?wd=Windows%20%E4%BF%AE%E6%94%B9%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%20PATH)[Google](https://www.google.com/search?q=Windows+修改系统环境变量+PATH))。

## IDE工具配置

Expand All @@ -62,13 +64,13 @@ Windows如何修改系统环境变量,以及修改环境变量 `PATH`,请参

由于这三个工具是 `Goland` 自带的,因此配置比较简单,参考以下图文操作示例:

1.`Goland` 的设置中,选择 `Tools` \- `File Watchers`,随后选择添加
1.`Goland` 的设置中,选择 `Tools` - `File Watchers`,随后选择添加

![](/markdown/beffdaf59725b7091d27c05db1cbef06.jpg)
![](/markdown/beffdaf59725b7091d27c05db1cbef06.jpg)

2. 依次点击添加这3个工具,使用默认的配置即可

![](/markdown/23d9056527febe75f82dcc8117f086fd.jpg)
![](/markdown/23d9056527febe75f82dcc8117f086fd.jpg)

3. 随后在撸代码的过程中保存代码文件时将会自动触发这3个工具的自动检测。

Expand Down Expand Up @@ -96,23 +98,30 @@ go install

#### `golint` 的配置

1. 随后在 `Goland``Tools` \- `File Watchers` 配置下,通过复制 `go fmt` 的配置
1. 随后在 `Goland``Tools` - `File Watchers` 配置下,通过复制 `go fmt` 的配置

![](/markdown/d6e625d79c63024347705acfc013463c.jpg)
![](/markdown/d6e625d79c63024347705acfc013463c.jpg)

2. 修改 `Name`, `Program`, `Arguments` 三项配置,其中 `Arguments` 需要加上 `-set_exit_status` 参数,如图所示
2. 修改 `Name`, `Program`, `Arguments` 三项配置,其中 `Arguments` 需要加上 `-set_exit_status` 参数,如图所示:

![](/markdown/219fe697e559aa6980100557996686a0.jpg)
![](/markdown/219fe697e559aa6980100557996686a0.jpg)

3. 保存即可,随后在代码编写中执行保存操作时将会自动触发 `golint` 工具检测。


### `golangci-lint` 的配置(可选)

1.  随后在 `Goland``Tools` \- `File Watchers` 配置下,通过复制 `go fmt` 的配置![](/markdown/267c777a8db90758dd8bad6013f60d7e.png)
2. 修改 `Name`, `Program`, `Arguments` 三项配置,其中 `Arguments` 需要加上 `run $FileDir$` 参数, `注意:`\`Advanced Options\`的选项可以在机器比较慢的时取消选择,如图所示:![](/markdown/5bf774ae9e6d123efa9010dd223a618a.png)
1.  随后在 `Goland``Tools` \- `File Watchers` 配置下,通过复制 `go fmt` 的配置
![](/markdown/267c777a8db90758dd8bad6013f60d7e.png)
2. 修改 `Name`, `Program`, `Arguments` 三项配置,其中 `Arguments` 需要加上 `run $FileDir$` 参数, `注意:``Advanced Options`的选项可以在机器比较慢的时取消选择,如图所示:
![](/markdown/5bf774ae9e6d123efa9010dd223a618a.png)

3. 保存即可,随后在代码编写中执行保存操作时将会自动触发 `golangci-lint` 工具检测。
4. 通过 `go Linter` 插件管理 `golangci-lint` 工具的配置,如下是 `go Linter` 的安装以及配置。![](/markdown/0f0fbd2a3a937573cdc317bbe005a6cf.png)![](/markdown/1c10390d9bfca56c0528f43f122b9ebd.png)

4. 通过 `go Linter` 插件管理 `golangci-lint` 工具的配置,如下是 `go Linter` 的安装以及配置。
![](/markdown/0f0fbd2a3a937573cdc317bbe005a6cf.png)

![](/markdown/1c10390d9bfca56c0528f43f122b9ebd.png)

## IDE代码风格配置

Expand Down
26 changes: 13 additions & 13 deletions docs/docs/其他资料/准备工作/环境安装.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ description: '手把手的Golang开发环境和IDE配置教程,适合Golang初

### Step1 - 下载Go开发包

访问Go国内镜像站下载页面 [https://golang.google.cn/dl/](https://golang.google.cn/dl/),并在页面最上方的版本中选择你当前的系统版本,会下载最新版本的Go开发包:
访问`Go`国内镜像站下载页面 [https://golang.google.cn/dl/](https://golang.google.cn/dl/),并在页面最上方的版本中选择你当前的系统版本,会下载最新版本的`Go`开发包:

![](/markdown/d3ce7f0e43ebf678adea8db4c46662d5.png)

Expand All @@ -29,11 +29,11 @@ Windows( `msi`)和MacOS( `pkg`)推荐使用安装包的方式来安装。作者

![](/markdown/f3f59daf118e34e16a920bcdcf6391de.png)

Go的开发包升级也是同样的过程
`Go`的开发包升级也是同样的过程

## IDE开发环境安装

目前 `Go``IDE` 有两款比较流行,一款是 `VSCode+Plugins`(免费),另一款是 `JetBrains` 公司的 `Goland`(收费)。由于 `JetBrains` 也是 `GoFrame` 框架的赞助商,因此我们优先推荐使用 `Goland` 来作为开发IDE,下载及注册请参考网上教程( [百度](https://www.baidu.com/s?wd=goland%20安装)[Google](https://www.google.com/search?q=goland+安装))。
目前 `Go``IDE` 有两款比较流行,一款是 `VSCode+Plugins`(免费),另一款是 `JetBrains` 公司的 `Goland`(收费)。由于 `JetBrains` 也是 `GoFrame` 框架的赞助商,因此我们这里优先推荐使用 `Goland` 来作为开发IDE,下载及注册请参考网上教程( [百度](https://www.baidu.com/s?wd=goland%20安装)[Google](https://www.google.com/search?q=goland+安装))。

`JetBrains` 的官方网站为: [https://www.jetbrains.com](https://www.jetbrains.com/?from=GoFrame)

Expand All @@ -51,11 +51,11 @@ Go的开发包升级也是同样的过程。

其中的 `Location` 随意选择一个本地路径即可。

![](/markdown/0520c06f4ba6cb8411ffe09eb0713a26.png)
![alt text](QQ_1733020124554.png)

#### Step3. 创建程序

新建一个 `go` 文件,叫做 `hello.go`,并输入以下代码:
编辑 `main.go`,并输入以下代码:

```go
package main
Expand All @@ -67,24 +67,24 @@ func main() {
}
```

![](/markdown/c3c0ce22f357637b39e7656733d91983.png)
![alt text](QQ_1733020331260.png)

#### Step4. 执行运行

菜单栏 `Run` \- `Run` \- `go build hello.go`
菜单栏 `Run` - `Run` - `go build hello.go`

![](/markdown/a4dc00babf5b34dcc081b916b83713b8.png)
![alt text](QQ_1733020422698.png)

![](/markdown/80d5fbefe18582fcbbf6f7c34cdff35a.png)
![alt text](QQ_1733020474019.png)

![](/markdown/ecb56b2f0bb37809e2fd11f89e667566.png)
![alt text](QQ_1733020511081.png)

恭喜你,第一个 `Go` 程序便成功了!

### VSCode的使用

#### [Step1.下载安装](https://code.visualstudio.com/)
#### [Step1 - 下载安装](https://code.visualstudio.com/)

#### [Step2.安装Go扩展](https://docs.microsoft.com/zh-cn/learn/modules/go-get-started/4-install-visual-studio-code?ns-enrollment-type=learningpath&ns-enrollment-id=learn.languages.go-first-steps)
#### [Step2 - 安装Go扩展](https://docs.microsoft.com/zh-cn/learn/modules/go-get-started/4-install-visual-studio-code?ns-enrollment-type=learningpath&ns-enrollment-id=learn.languages.go-first-steps)

#### [Step3.HelloWorld](https://docs.microsoft.com/zh-cn/learn/modules/go-get-started/5-hello-world)
#### [Step3 - Hello World](https://docs.microsoft.com/zh-cn/learn/modules/go-get-started/5-hello-world)

0 comments on commit b054e35

Please sign in to comment.