专栏首页GoUpUpGo 每日一库之 air

Go 每日一库之 air

简介

air是 Go 语言的热加载工具,它可以监听文件或目录的变化,自动编译,重启程序。大大提高开发期的工作效率。

快速使用

本文代码使用 Go Modules,在 Mac 上运行。

先创建目录并初始化:

$ mkdir air && cd air
$ go mod init github.com/darjun/go-daily-lib/air

执行下面的命令安装air工具:

$ go get -u github.com/cosmtrek/air

上面的命令会在GOPATH/bin目录下生成air命令。我一般会将GOPATH/bin加入系统PATH中,所以可以方便地在任何地方执行air命令。

下面我们使用标准库net/http编写一个简单的 Web 服务器:

package main

import (
  "fmt"
  "log"
  "net/http"
)

func index(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintln(w, "Hello, world!")
}

func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("/", index)

  server := &http.Server{
    Handler: mux,
    Addr:    ":8080",
  }

  log.Fatal(server.ListenAndServe())
}

运行程序:

$ go run main.go

在浏览器中访问localhost:8080即可看到Hello, world!

如果现在要求把Hello, world!改为Hello, dj!,如果不用air只能修改代码,执行go build编译,然后重启。

使用air,我们只需要执行下面的命令就可以运行程序:

$ air

air会自动编译,启动程序,并监听当前目录中的文件修改:

当我们将Hello, world!改为Hello, dj!时,air监听到了这个修改,会自动编译,并且重启程序:

这时,我们在浏览器中访问localhost:8080,文本会变为Hello, dj!,是不是很方便?

配置

直接执行air命令,使用的就是默认的配置。一般建议将air项目中提供的air_example.toml配置文件复制一份,根据自己的需求做修改和定制:

root = "."
tmp_dir = "tmp"

[build]
cmd = "go build -o ./tmp/main ."
bin = "tmp/main"
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
include_ext = ["go", "tpl", "tmpl", "html"]
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
include_dir = []
exclude_file = []
log = "air.log"
delay = 1000 # ms
stop_on_error = true
send_interrupt = false
kill_delay = 500 # ms

[log]
time = false

[color]
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
clean_on_exit = true

可以配置项目根目录,临时文件目录,编译和执行的命令,监听文件目录,监听后缀名,甚至控制台日志颜色都可以配置。

调试模式

如果想查看air更详细的执行流程,可以使用-d选项。

使用-d选项,air会输出非常详细的信息,可以帮助排查问题。

总结

在开发期,使用air可以避免频繁地编译,重启。把这些都自动化了,大大地提升了开发效率。

大家如果发现好玩、好用的 Go 语言库,欢迎到 Go 每日一库 GitHub 上提交 issue?

参考

  1. air GitHub:https://github.com/cosmtrek/air
  2. Go 每日一库 GitHub:https://github.com/darjun/go-daily-lib

本文分享自微信公众号 - GoUpUp(GoUp-Up),作者:dj

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 每日一库之 zap

    在很早之前的文章中,我们介绍过 Go 标准日志库log和结构化的日志库logrus。在热点函数中记录日志对日志库的执行性能有较高的要求,不能影响正常逻辑的执行时...

    用户7731323
  • Go 每日一库之 go-app

    go-app是一个使用 Go + WebAssembly 技术编写渐进式 Web 应用的库。WebAssembly 是一种可以运行在现代浏览器中的新式代码。近两...

    用户7731323
  • Go 每日一库之 jobrunner

    我们在 Web 开发中时常会遇到这样的需求,执行一个操作之后,需要给用户一定形式的通知。例如,用户下单之后通过邮件发送电子发票,网上购票支付后通过短信发送车次信...

    用户7731323
  • Codeforces Round #538 (Div. 2) B. Yet Another Array Partitioning Task(思维)

    题目链接:https://codeforces.com/contest/1114/problem/B

    Ch_Zaqdt
  • java 快速求素数

    1 package test ; 2 import java.util.Scanner ; 3 public class hello 4 { 5 ...

    Gxjun
  • POJ-2185-Milking Grid

    ACM模版 描述 ? 题解 image.png 代码 #include <iostream> #include <cstdio> #include <cstri...

    f_zyj
  • 基于qiankun落地部署微前端爬”坑“记

    举个例子:我们有个这样的场景,我有个门户Portal的登陆界面(主应用基座),登陆成果后可以切换不同的子应用,如下有两个子应用A和B,且都在之前是独立部署的,单...

    树酱
  • 基于qiankun落地部署微前端爬”坑“记

    举个例子:我们有个这样的场景,我有个门户Portal的登陆界面(主应用基座),登陆成果后可以切换不同的子应用,如下有两个子应用A和B,且都在之前是独立部署的,单...

    树酱
  • P3384 树链剖分 点操作

    操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z

    用户2965768
  • codeforces 1283E(贪心)

    对于最小值,我们发现如果两个数的差值小于等于2,那么两个数就可以合并在一起。 对于最大值,我们尽可能的让数字向空房子移动,如果移动后还有该数字存在,则尽可能的...

    dejavu1zz

扫码关注云+社区

领取腾讯云代金券