# Cara Menggunakan Hot Reload di Bahasa Go

Bang ada gak sih alternative nodemon seperti di Nodejs tapi di pemrograman Go? Jawabannya ada, live-reload/hot reload yang saya gunakan di Go adalah Air.

Pembuat tools ini bernama Rick Yu dengan motivasi yaitu saat mengembangkan aplikasi dengan kerangka kerja Go dan Gin sayang sekali framework tersebut tidak memiliki fungsi live-reloading. Nah, pada artikerl ini anda akan mempelajari cara membuat live-reload pada Go sesuai dengan pengalaman saya.

## Menginstal Air

Untuk menginstallnya silahkan buka [disini](https://github.com/cosmtrek/air) atau ikuti cara yang saya pake yaitu menggunakan go install seperti di bawah ini.

```bash
go install github.com/cosmtrek/air@latest
```

## Menyiapkan Project

Buat direktori baru dan file main.go di dalamnya dengan isi berikut:

```go
package main

import "fmt"

func main() {
    fmt.Println("hello world")
}
```

Pada directory project jalankan perintah berikut untuk menghasilkan file konfigurasi `.air.toml`:

```bash
air init
```

Anda akan melihan output seperti ini saat menghasilkan file .air.toml:

```bash
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ , built with Go

mkdir /home/ryanbekhen/projects/hello-world/tmp
watching .
!exclude tmp
building...
running...
```

## Konfigurasi Air

Saat anda ingin mengubah konfigurasi air, kita dapat mengubahnya di file .air.toml. Berikut adalah contoh isi dari file konfigurasinya:

```ini
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"

[build]
  args_bin = []
  bin = "./tmp/main"
  cmd = "go build -o ./tmp/main ."
  delay = 1000
  exclude_dir = ["assets", "tmp", "vendor", "testdata"]
  exclude_file = []
  exclude_regex = ["_test.go"]
  exclude_unchanged = false
  follow_symlink = false
  full_bin = ""
  include_dir = []
  include_ext = ["go", "tpl", "tmpl", "html"]
  kill_delay = "0s"
  log = "build-errors.log"
  send_interrupt = false
  stop_on_error = true
[color]
  app = ""
  build = "yellow"
  main = "magenta"
  runner = "green"
  watcher = "cyan"

[log]
  time = false

[misc]
  clean_on_exit = false

[screen]
  clear_on_rebuild = false
```

Nah, kalau dari konfigurasi di atas seharusnya sudah sangat jelas apa saya yang bisa kita terapkan di air. Sebagai contoh, biasanya saya ingin setiap saya berhenti ngoding atau berhenti menjalankan programnya air secara otomatis menghapus directory tmp nya. Saya menggunakan mengubah konfigurasinya seperti berikut:

```ini
[misc]
  clean_on_exit = true
```

Dengan ini setiap kita berhenti menjalankan programnya secari otomatis air menghapus direktori tmp.

---

Semoga dengan sedikit pengalaman yang saya bagikan di atas bisa membantu anda sehari-hari dalam mengembangkan aplikasi Go anda, dan jangan lupa di share yah!! Terima kasih.
