一、Go环境搭建
1.1 安装
进入Golang官网 https://go.dev,点击 Download
若无法打开网页可以使用国内的Go语言中文网 https://studygolang.com/dl 进入下载
找到合适的平台点击链接下载即可(这里以Windows距离)
下载完成后 Next Next 安装即可,没有需要配置的地方。
安装位置保持默认即可。
点击Finish完成安装
安装后Go将自动设置环境变量,打开 终端 或 CMD窗口验证 Go命令是否可用。
go version
若安装成功,将输出Go的版本以及操作系统和指令集。
配置国内镜像
Go官方的SDK已经很好用了,但是在开发过程我还可能使用到一些三方的包来加快我们的开发速度。
Go在1.11 以后采用Go Module 来实现包管理,原理是采用以源代码的方式从远程仓库中拉取代码,大部分的开源项目仓库都位于Github,由于众所周知的原因Github的方式往往较忙,这时候我们就可以配置国内镜像的方式来加速依赖包的下载。
这一点Go开发团队也已经考虑到,我们只需简单的命令即可完成配置操作。
目前常用的国内镜像有:
- https://goproxy.cn/
- https://goproxy.io/
这里以 https://goproxy.cn 举例
我们按照网址教程执行命令即可:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
接下来你可以通过下面命令运行是否配置成功
go env
若配置成功可以在结果中找到 GOPROXY为您刚才设置的值。
二、VSCode 开发准备
这里以VSCode为例说明如何开发Go语言程序,在执行该操作前请确保已经安装Go开发环境,方式详见上一章节内容。
打开VSCode,点击左侧的 Extensions 进入插件仓库
在 Search 框内输入 Go 按下回车搜索。
这里我们选第一个插件 Go 该插件式由Go官方团队开发的,点击右侧的 install 安装插件
安装完成后,我们 将搜索框中的关键字删除 返回Extensions界面,点击 INSTALLED 展开列表,就可以看到刚才安装Go插件了。
三、第一个Go程序
3.1 准备
接下来我们来写第一个Go程序,helloworld!
创建一个文件夹,命名为 helloworld
将刚才创建的helloworld文件夹拖 拽入VSCode窗口,或者使用 File-> OpenFolder… 打开也可以。
解下来打开终端,点击左下角 叉和感叹号。
在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷点 CTRL + ` 直接打开)。
接下来我们初始化Go的Module
go mod init helloworld
命令格式为 go mod init 模块名称,这里就是
helloworld
执行后将在项目目录中创建一个名为go.mod
的文件,并输出提示语句go: creating new go.mod: module helloworld
3.2 编写main函数
接下来就可以开始编写我们的第一个Go程序了
点击文件创建图标创建文件
创建一个名为 main.go
的文件,按下 回车 确认。
写入以下内容:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
package main
同其他语言一样,Go语言也是从main函数开始执行,特别的main函数必需得在main
包下。
import "fmt"
表示我们导入了一个名为fmt的包。
接下来就是输出Helloworld部分,就不在赘述。
3.3 编译运行
首先打开终端(CTRL + `)运行下面命令安装 dlv调试工具:
dlv 可以简单理解为认为是Go的GDB,用于调试Go程序。
注意: dlv仅需安装一次! 不需要在每次编译时安装!
go install -v github.com/go-delve/delve/cmd/dlv@latest
安装完成后我们可以使用下面方式验证
dlv version
安装成功将输出dlv的版本号
接下来就可以关闭终端了。
终于可以开始编译和运行Go程序了。
点击顶部导航栏中的 Run -> Run Without Debugging (也可直接按下 CTRL + F5)
稍等片刻后,程序编译完成后将弹出终端,并输出 “Hello,World!”,至此我们的第一个程序就运行成功了。
四、断点调试
当程序变得越来越复杂,我们往往需要对程序进行调试,断点调试是一种非常不错的方式。
例如我们有如下程序
package main
import "fmt"
func main() {
total := 0
for i := 0; i < 10; i++ {
total += i
}
fmt.Println("Finished total:", total)
}
假设我们需要知道在一轮循环中 total的数值,我们就可以使用断点。
将鼠标移动至需要打断点的行的行号左侧,将会浮现红色点,点击左键 就可以打上断点。
点击后断点将以 红色高亮 显示
接下来我们就可以开始调试。
点击顶部导航栏中的 Run -> Start Debugging (也可直接按下 F5)
启动调试后将进入调试窗口,程序将运行并在一第一个断点处停住,行左侧的箭头表示当前执行的代码行,如下:
我们可以在 左侧的 WATCH窗口 处添加点击 + 添加一个观察变量,并 输入 total ,按下回车就就可以完成添加。
添加后我们就可以在窗口中观察变量的值。
如果我们需要继续执行程序,可以在调试控制窗口中的点击播放图标,也可以按下 F5。
如果你不需要特别观察某个变量可以查看 VARIABLES 中 Locals窗口,这个窗口中显示当前运行环境下的变量。
例如在运行至fmt.Println("Finished total:", total)
行时,可以看到 Locals窗口中的 total
值为 45
。
五、引入外部依赖
程序开发往往需要很多的外部三方开源库,他们提高了我们的开发速度,例如:
- 数据库操作框架:https://gorm.io/index.html
- Web服务器框架:https://gofiber.io/
- 等
如何使用这些框架呢?
通常来说我们都是采用Go Module来实现三方库的管理。
以Web框架Fiber为例,运行下面命令就可以完成安装(详见https://docs.gofiber.io/):
go get github.com/gofiber/fiber/v2
其命令格式为:go get 仓库地址[@版本号]
安装后将会生成一个go.sum
并且在go.mod
中的require
中加入很多依赖包,这里就是这个Go模块所需要的依赖包列表。
go.sum
用于保存项目所使用所有依赖的详细版本和Hash,包依赖包的依赖。
接下来我们简单编写一个Fiber的demo
package main
import (
"log"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
log.Fatal(app.Listen(":3000"))
}
接下来我们按下 CTRL + F5 运行程序,然后打开浏览器访问http://127.0.0.1:3000
,就可以看到Helloworld页面!
六、编译为可执行程序
6.1 编译
当我们完成程序的开发后我们需要将我们的软件编译为可执行程序。
你可以这样做
在项目根目录(main函数所在目录)打开终端,运行下面语句进行编译
go build .
Go编译完成后将在当前目录下生成可执行程序,程序名称为当前目录的名称。
这样我们就完成了程序的编译。
6.2 交叉编译
当我们使用Windows x86环境开发,但是我们需要将程序部署到 Linux ARM64环境下时就需要使用Go的交叉编译功能。
Go提供环境变量(详见 https://go.dev/wiki/)
- GOOS:GO操作系统(OS)用于设置目标编译的操作系统,如
windows
、linux
、darwin
(MacOS) - GOARCH:GO架构(Architecture)用于设置CPU所示使用的指令集,如
amd64
(x86)、arm64
Go (Golang) GOOS and GOARCH https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63
因此我们可以通过设置环境变量来选择编译的平台和指令集架构。
例如:编译Linux ARM64程序我们可以这样做
go env -w GOOS=linux
go env -w GOARCH=arm64
go build .
该种方式有个缺点每次都得将Go环境中的变量改回来,不然编译的程序将一直是指定的平台。
更加推荐的做法是使用临时的变量设置。
例如Windows CMD窗口可以这么做,首先得进入CMD不然SET无效。
CMD
SET GOOS=linux
SET GOARCH=arm64
go build .
类Unix系统可以这样做(MacOS、Linux)
GOOS=windows GOARCH=amd64 go build .
参考文献
[1]. Golang . 2024 . https://go.dev
[2]. github . fiber . 2024. https://github.com/gofiber/fiber
[3]. github . vscode-go . 2024 . https://github.com/golang/vscode-go