1 说明

Go 语言为编译型语言,编译型语言有诸多好处,如:

  • 部署简单
  • 提早发现错误
  • 执行效率高

然而这也意味着代码修改后需重新编译才能看到变更,这为我们本地开发带来了诸多不便。
本节中我们将一起探讨如何使用第三方工具来提高开发效率。

2 安装 air

自动重载方案,比较老牌的是 fresh ,不过此项目已经放弃维护。
本课程我们将使用的是 air。接下来先安装 air 。
国内访问外网不稳定,为了让安装顺利进行,我们需要先设置 Go Proxy。执行以下命令:

  1. $ go env -w GOPROXY=https://goproxy.cn

设置成功后,使用以下命令来安装 air :

  1. $ GO111MODULE=on go get -u github.com/cosmtrek/air

(windows 下 github.com/cosmtrek/air/releases 此处下载后放入 Go 安装目录下的 bin 目录,重命名为 air.exe)
最前面的 GO111MODULE=on 是只为当前命令启用 Go Module,开启以后我们才能使用 Go Proxy 进行加速。后续我们会深入讲解 Go Module ,这里你只需要记住这个用法即可。

  1. 注意: 以上操作如果遇到错误,请先确保你的 Go 版本是 1.15。使用此命令查看 go version

安装成功后使用以下命令检查下:

  1. $ air
  2. __ _ ___
  3. / /\ | | | |_)
  4. /_/--\ |_| |_| \_ v1.12.1 // live reload for Go apps, with Go1.14.0

3 使用 air

在我们的 goblog 项目根目录运行以下命令:

  1. $ air

在 VSCode 内置命令行中执行结果如下:
image.png
此时浏览器访问 localhost:3000/ :
image.png

4 测试自动加载

修改 main.go 文件如下:
main.go

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. func handlerFunc(w http.ResponseWriter, r *http.Request) {
  7. if r.URL.Path == "/" {
  8. fmt.Fprint(w, "<h1>Hello, 欢迎来到 goblog!</h1>")
  9. } else if r.URL.Path == "/about" {
  10. fmt.Fprint(w, "此博客是用以记录编程笔记,如您有反馈或建议,请联系 "+
  11. "<a href=\"mailto:summer@example.com\">summer@example.com</a>")
  12. } else {
  13. fmt.Fprint(w, "<h1>请求页面未找到 :(</h1>"+
  14. "<p>如有疑惑,请联系我们。</p>")
  15. }
  16. }
  17. func main() {
  18. http.HandleFunc("/", handlerFunc)
  19. http.ListenAndServe(":3000", nil)
  20. }

保存后可以看到命令行有相关的更信息:
image.png
浏览器访问 localhost:3000/ :
image.png
即可看到我们修改后的欢迎语。至此我们成功集成了 air 自动重置功能。
后续的课程中,请确保 air 命令行时刻处于运行状态。air 还有很多参数可供设置,我们会在后续课程中使用到时再做讲解。

代码版本

为了保持 air 窗口持续运行着,我们点击 + 按钮新建命令行窗口,并使用命令:

  1. $ git status

来查看文件修改状态:
image.png
从上图可以看到我们的根目录下多了一个 tmp 文件夹,这是 air 命令的编译文件存放地。我们需要设置版本控制器将其排除在外:

  1. vim .gitignore
  2. tmp

再次执行 git status 即可看到 tmp 目录已被排除在外:
image.png
接下来我们可以放心地将代码纳入版本控制器中:

  1. $ git add .
  2. $ git commit -m "自动重载"