Go開發過程中總是要停下來編譯:用它解決你的煩惱,快樂編程

使用編譯型語言進行開發,總是需要不斷的進行這樣一個循環:編碼->編譯->運行->調試->編碼。每次改完代碼,都得編譯一下,然後運行,挺煩人的。因為 Go 擁有極快的編譯速度,如果改完代碼後自動編譯、運行,看效果,這樣會極大的減少“人腦 CPU” 切換的時間,正在享受 Go 編程帶來的快樂!

既然這是一個痛點,自然會有很多解決方案。我在 2012 年底就嘗試寫了這樣的工具,但之後沒有維護。現在已經有更好、更成熟的工具。其中 https://github.com/oxequa/realize 這個工具有 3.3k+ star,然而我在試用時,通過 Module 的方式沒法安裝它,非 Module 方式沒嘗試,具體可以查看:https://github.com/oxequa/realize/issues/253 。

我在寫知識星球《Go 項目實戰》[1]的簡書項目時,發現了另外一個工具:air[2],它能實時重新加載 Go 應用,包含編譯、重啟動,對於 Web 之類的項目來說帶來極大的便利。本文就是介紹它的使用。

起源

Air 作者開始用 Go 和 gin 框架中開發網站時,因為 gin 缺少實時重新加載功能,找到並嘗試 fresh[3] 這個工具,但似乎不太好用,因此打算以一種更好的方式實現一個。終於,Air 誕生了。此外,非常感謝 pilu,沒有 fresh,就沒有 air。

Air 是用於開發 Go 應用程序時,實時重新加載的命令行實用程序。通常情況下,你只需要在項目根目錄運行它,然後專注於你的代碼。

核心特性

  • 彩色日誌輸出
  • 自定義構建或二進制的命令
  • 支持排除子目錄
  • Air 啟動後允許監控新目錄
  • 更友好的構建過程

安裝

截止當前(2019 年 11 月 17 日),Air 的最新版本是 1.11.1。官方提供了預編譯好的二進制文件,可以直接下載使用。

macOS

curl -fLo ~/air \\
https://raw.githubusercontent.com/cosmtrek/air/master/bin/darwin/air
chmod +x ~/air

Linux

curl -fLo ~/air \\
https://raw.githubusercontent.com/cosmtrek/air/master/bin/linux/air
chmod +x ~/air

Windows

curl -fLo C:\\air.exe \\
https://raw.githubusercontent.com/cosmtrek/air/master/bin/windows/air.exe

源碼

我個人更喜歡通過源碼安裝:(本人 Go 版本是 1.13.3)

go get -v github.com/cosmtrek/air/cmd/...

為了使用方便,請將 air 加入 PATH 中。

Docker

作者還提供了 Docker 的方式:

docker run -it --rm \\
-w "<project>" \\
-e "air_wd=<project>" \\
-v $(pwd):<project> \\
-p <port>: \\
cosmtrek/air
-c <conf>
/<port>/<project>/<project>/<project>

例如:

docker run -it --rm \\
-w "/Users/xuxinhua/project/golang/jianshu" \\
-v $(pwd):/Users/xuxinhua/project/golang/jianshu \\
-p 2019:2019 \\
cosmtrek/air

如何使用

Air 使用很簡單,最簡單的方式是直接在

項目根目錄運行 air:

air

會輸出如下信息:

Go開發過程中總是要停下來編譯:用它解決你的煩惱,快樂編程

air 啟動

默認情況下,air 會在當前目錄查找 .air.conf 配置文件,這是一個 toml 格式的文件。如果沒有找到,使用默認的配置。一般建議創建一個 .air.conf 文件,可以從 air 項目中的 air.conf.example 複製配置內容,進行一些修改。配置項都挺簡單的,我就不一一介紹了,只介紹幾個可能需要進行修改的,其他的有疑問可以留言交流。

注意事項

1、[build] 下的 cmd 配置默認是 go build -o ./tmp/main main.go,很可能你需要修改,比如簡書項目就必須修改為 go build -o ./tmp/main gitea.com/zsxq/jianshu/cmd/...;當然也可以改為其他你常用的編譯方式,比如 make 等;

2、include_ext 和 exclude_dir 配置。避免監控不必要的文件和目錄;

3、記得將 tmp 目錄加入 .gitignore 中;

4、如果出現 watch error, open tool many files…,說明要監控的文件太多,一方面確保修改了了 include_ext 和 exclude_dir,另一方面可以通過 ulimit -n 5000 調大進程允許打開的文件數;

結語

好項目歡迎大家 Star,也歡迎貢獻代碼。看看修改代碼後的效果,是不是酷酷的?!

Go開發過程中總是要停下來編譯:用它解決你的煩惱,快樂編程


喜歡本文的朋友,歡迎關注“Go語言中文網”:

Go開發過程中總是要停下來編譯:用它解決你的煩惱,快樂編程

文中鏈接

[1]《Go項目實戰》: https://t.zsxq.com/aYF6aqv

[2]air: https://github.com/cosmtrek/air

[3]fresh: https://github.com/gravityblast/fresh


分享到:


相關文章: