Golang-01:如何快速运行 Golang 程序
本篇文章只针对本地电脑环境的配置入门学习,如果是涉及到工作开发环境的配置,请移步至更详细的官方文档哦:[Golang] 开发环境配置
1. Go path/go Modules 开发模式对比
注意:
能使用 go modules 模式就使用该模式,即使以前没有使用该模式也可以设置成该模式。
传统 gopath 模式 - 不做包管理
在早期 go 版本中,创建项目是需要创建到 go/src 目录之下,否则无法 import。我们打开 GoLand 然后创建新的 project 时就可以看到 Go (GOPATH) 这个选项,它就是符合旧的 go 版本,默认创建到 go/src 之下。
另外,旧版本下还需要设置 GO111MODULE=off,不然运行时会报错。
该模式下,import 查找文件时会先查找 gopath/src 这个目录下的文件,其次再到 goroot/src 目录下查找。
gomodules 模式 - 会做包管理
注意,这个模式下就需要设置 GO111MODULE=on。
如果创建 project 时,我们选择了第一个 Go 这个选项。
那么创建出的项目就会多一个 go.mod 文件。
2. 下载 Golang
到官网将 Golang sdk 下载下来,然后打开安装包,选择好安装路径,直接安装即可。
3. 配置 Golang 环境
GOROOT 就是 Go 软件的位置,GOPATH 就是我们自己写 go 代码的位置,GOBIN 一般就是指 GOPATH 下创建的 bin 目录。
3.1 Windows
- 第一步
找到电脑属性配置界面,直接打开文件夹,左边栏中右键 “ 此电脑 “ 并点击 “ 属性 “ 即可。
- 第二步
找到 “ 高级系统设置 “,点击 “ 环境变量 “。
- 第三步
将安装后的目录 \go\bin 添加到 “ 环境变量 “ 里的 “ 系统变量 “ 中的 “Path” 变量中。
同时,添加 GOROOT 变量。
另外,也可以设置自己存放 go 文件的文件夹作为 GOPATH 路径,但是高版本已经不用 go path 来管理项目了,而是用 go mod 依赖来管理。
- 第四步
配置国内镜像加速。
3.2 MacOS
- 第一步
配置国内镜像加速。
1 | go env -w GO111MODULE=on |
- 第二步
创建项目代码的文件夹。
1 | # project目录下有php、go、java、c、python文件夹,分别用于存放各语言的项目 |
- 第三步
配置 GOROOT、GOPATH、GOBIN。
可以通过 go env 查看当前 go 的相关设置,通过 go env -w 来设置 go 的相关环境变量,这里我们用文件去控制:
1 | vim ~/.bash_profile |
添加下面内容:
1 | # go语言相关配置 |
加载刚刚修改的配置:
1 | source ~/.bash_profile |
注:如果执行 source ~/.bash_profile 命令式报错:”no such file or directory: /Users/haveyb/.profile”,通过 touch 命令创建一个即可。
1 | touch /Users/haveyb/.profile |
然后重新执行 source ~/.bash_profile
执行完后,可以通过执行 go env 命令查看是否设置成功。
4. 安装并配置 Git 环境
下载完安装包后打开,全部点击下一步即可。
注意,记住自己将 git 安装到哪个路径了。
然后将 git 目录下的 bin 路径,添加到 “ 环境变量 “ 中,同样是 “ 系统变量 “ 里的 “Path” 中。
5. 安装 Vscode 并配置环境
直接打开安装包,一直下一步即可。
5.1 下载 Vscode 插件
- 安装 go 插件
- 安装 coderunner
- 可以帮我们快速编译并运行,不用再 go build 等操作
- 更新 go 插件,
ctrl+shift+p,go: install + update tools
5.2 初始化并运行第一个 Hello World 文件
小 Tips
- 显示/隐藏边栏,
ctrl+b- 显示/隐藏信息栏或终端,
ctrl+反引号另外,每次运行程序前都需要先保存文件再运行。
在项目文件夹下,创建一个 main.go 文件,然后输入下面代码:
1 | package main |
此时会显示 package main 这行出现错误,我们需要 go mod init 一下。
可以发现源文件已经不会跳出报错信息:
go.mod 文件内容:
如果需要下载包:
- go get xxx: go get -u github.com/gin-gonic/gin
5.3 调试 Go 程序
设置断点
启动调试
查看变量值
1 | package main |
注意:调试程序需要 go mod 初始化项目
5.4 Vscode 常用快捷键
- pkgm:
main包+main主函数 - ff:
fmt.Printf("", var) - for:
for i := 0; i < count; i++ {} - forr:
for _, v := range v {} - fmain:
func main() {} - a.print!:
fmt.Printf("a: %v\n", a)
5.5 使用 Vscode 工作区
添加工作区
直接在 vscode 中选择一个文件夹,添加到工作区中。
我们这里选择新创建一个 my_workspace 文件夹,然后添加到工作区中。
保存工作区
接下来将这个工作区,保存到我们的 my_workspace 文件夹中。
注意,要保存到 my_workspace 文件夹中。
这样,这个文件夹中就多了一个文件,我们可以直接点击这个文件来打开 vscode,进入到我们的工作区中。
初始化项目
现在我们就可以在这个工作区中创建多个项目,然后分别在这些项目中初始化,并且每个项目之间不会互相干扰。
这样一来,就可以在一个窗口下处理多个项目,而不用反反复复打开项目文件进行编码。
6. 运行多个 Go 文件
如果想运行多个文件,比如现在有两个 go 文件,我需要在主函数中获取这两个文件中的函数并运行。
另外,我将这两个文件放在同一个文件夹下:
注意: 这两个文件所属 package 就是它们所属的文件夹名称,并且 main.go 需要在最外面这一层。
我在 main.go 函数调用这两个函数,需要先引入它们所属的包,然后再调用包里的函数。
1 | package main |
7. 编码规范
- 代码规范不是强制的,也就是你不遵循代码规范写出来的代码运行也是完全没有问题的
- 代码规范目的是方便团队形成一个统一的代码⻛格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码⻛格和 Go 语言提供的常用的工具这几个方面做一个说明。
- 规范并不是唯一的,也就是说理论上每个公司都可以制定自己的规范,不过一般来说整体上规范差异不会很 大。
命名是代码规范中很重要的一部分,统一的命名规则有利于提高的代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。
- 当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字⺟开头,如:Group 1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);
- 命名如果以小写字⺟开头,则对包外是不可⻅的,但是他们在整个包的内部是可⻅并且可用的(像面向对象语言中的 private )
包名 :package
保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为小写单词,不要使用下划线或者混合大小写。
1 | package model |
文件名
尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词。
结构体命名
- 采用驼峰命名法,首字⺟根据访问控制大写或者小写
- Struct 申明和初始化格式采用多行,例如下面:
1 | type User struct{ |
接口命名
- 命名规则基本和上面的结构体类型
- 单个函数的结构名以 “er” 作为后缀,例如 Reader , Writer 。
1 | type Reader interface { |
变量命名
- 和结构体类似,变量名称一般遵循驼峰法,首字⺟根据访问控制原则大写或者小写,但遇到特有名词时,需要遵循以下规则:
- 如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient
- 其它情况都应当使用该名词原有的写法,如 APIClient、repoID、UserID
- 错误示例:UrlArray,应该写成 urlArray 或者 URLArray
- 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头
1 | var isExist bool |
常量命名
常量均需使用全部大写字⺟组成,并使用下划线分词
如果是枚举类型的常量,需要先创建相应类型:
1 | type Scheme string |
Go 提供 C ⻛格的 /* */ 块注释和 C ++ ⻛格的 // 行注释。行注释是常态;块注释主要显示为包注释,但在表达式中很有用或禁用大量代码。
- 单行注释是最常⻅的注释形式,你可以在任何地方使用以 // 开头的单行注释
- 多行注释也叫块注释,均已以
/*开头,并以*/结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段
go 语言自带的 godoc 工具可以根据注释生成文档,生成可以自动生成对应的网站(golang.org 就是使用 godoc 工具直接生成的),注释的质量决定了生成的文档的质量。每个包都应该有一个包注释,在 package 子句之前有一个块注释。对于多文件包,包注释只需要存在于一个文件中,任何一个都可以。包评论应该介绍包,并提供与整个包相关的信息。它将首先出现在 godoc ⻚面上,并应设置下面的详细文档。
包注释
每个包都应该有一个包注释,一个位于 package 子句之前的块注释或行注释。包如果有多个 go 文件,只需要出现在一个 go 文件中(一般是和包同名的文件)即可。包注释应该包含下面基本信息 (请严格按照这个顺序,简介,创建人,创建时间):
- 包的基本简介(包名,简介)
- 创建者,格式:创建人: rtx 名
- 创建时间,格式:创建时间: yyyyMMdd
结构(接口)注释
每个自定义的结构体或者接口都应该有注释说明,该注释对结构进行简要介绍,放在结构体定义的前一行,格式为:结构体名,结构体说明。同时结构体内的每个成员变量都要有说明,该说明放在成员变量的后面(注意对⻬),实例如下:
1 | type User struct{ |
函数(方法)注释
每个函数,或者方法(结构体或者接口下的函数称为方法)都应该有注释说明,函数的注释应该包括三个方面(严格按照此顺序撰写):
- 简要说明,格式说明:以函数名开头,”,” 分隔说明部分
- 参数列表:每行一个参数,参数名开头,”,” 分隔说明部分
- 返回值:每行一个返回值
1 |
|
代码逻辑注释
对于一些关键位置的代码逻辑,或者局部较为复杂的逻辑,需要有相应的逻辑说明,方便其他开发者阅读该段代码,实例如下:
1 | xxxxx |
注释⻛格
统一使用中文注释,对于中英文字符之间严格使用空格分隔,这个不仅仅是中文和英文之间,英文和中文标点之间也都要使用空格分隔,例如:
上面 Redis 、 id 、 DB 和其他中文字符之间都是用了空格分隔。
- 建议全部使用单行注释
- 和代码的规范一样,单行注释不要过⻓,禁止超过 120 字符。
Import 在多行的情况下,goimports 会自动帮你格式化,但是我们这里还是规范一下 import 的一些规范,如果你在一个文件里面引入了一个 package,还是建议采用如下格式:
如果你的包引入了三种类型的包,标准库包,程序内部包,第三方包,建议采用如下方式进行组织你的包:
1 | import ( |
有顺序的引入包,不同的类型采用空格分离,第一种实标准库,第二是项目包,第三是第三方包。在项目中不要使用相对路径引入包:
1 | import "../net" |
但是如果是引入本项目中的其他包,最好使用相对路径。
- 错误处理的原则就是不能丢弃任何有返回 err 的调用,不要使用 _ 丢弃,必须全部处理。接收到错误,要么返回 err,或者使用 log 记录下来
- 尽早 return:一旦有错误发生,⻢上返回
- 尽量不要使用 panic,除非你知道你在做什么
- 错误描述如果是英文必须为小写,不需要标点结尾
1 | if err != nil { |





















