Struktur Project Golang Menggunakan Go Mod
Struktur Project Golang Menggunakan Go Mod
Pada bahasa pemrograman Go sejak versi 1.11, kita dapat menggunakan struktur modular yang lebih
fleksibel menggunakan go mod dibandingkan dengan versi sebelumnya yang membuat kita selalu
terpaut dengan struktur GOPATH. Kemudahan yang diberikan oleh go mod menurut hemat saya
cukup krusial di dalam mempermudah developer di dalam menentukan struktur project yang diinginkan.
Pada tulisan ini saya akan mencoba menjelaskan mengenai cara menggunakan go mod pada project
sederhana kita.
Inisialisasi
Misalkan kita telah membuat direktori baru bernama hellp, dan kita
sudah berada di dalam direktori tersebut. Untuk melakukan inisialisasi,
gunakan perintah go mod:
$ go mod init some-repo.co.id/donixo/hellp
Perintah go mod akan menghasilkan satu berkas baru dengan nama go.mod pada
direktori kita berada. Isi berkas tersebut kira-kira seperti di bawah ini:
module some-repo.co.id/donixo/hellp
go 1.14
Struktur Project
Misalkan kita ingin membuat struktur project dengan satu berkas program utama hellp.go
dan dua buah modul dengan nama lala dan susu:
.
├── go.mod
├── hellp.go
├── lala
│ ├── ahoy.go
│ └── ahoy_test.go
└── susu
└── jinx.go
Berkas Utama
Misal, pada berkas utama, kita ingin mengimport modul susu, maka format import yang
dapat kita lakukan adalah <nama-modul-di-go-mod-kita>/<folder-modul>, dalam struktur direktori contoh di atas, maka hasilnya akan menjadi sebagai berikut: some-repo.co.id/donixo/hellp/susu.
Untuk lebih jelasnya, kita dapat melihat isi dari berkas hellp.go di bawah ini:
package main
import "fmt"
import "some-repo.co.id/donixo/hellp/susu"
func main() {
fmt.Println(susu.Jinx())
}
Direktori Modul
Jika pada bagian di atas kita melihat cara mendefinisikan pemanggilan modul dari dalam berkas utama, maka pada bagian ini kita akan melihat bagaimana cara mendefinisikan berkas dari dalam modul.
Pada contoh di bawah ini kita akan melihat kode dari dua buah modul, lala dan susu. Modul
susu membutuhkan satu fungsi, yaitu Ahoy() dari modul lala:
lala/ahoy.go:
package lala
func Ahoy() string {
return "ahoy!"
}
lala/ahoy_test.go:
package lala
import "testing"
func TestAhoy(t *testing.T) {
got := Ahoy()
if got != "ahoy!" {
t.Errorf("we want ahoy")
}
}
Pada modul susu, kita dapat melakukan import modul lala dengan format <nama-modul-di-go-mod-kita>/<folder-modul>, atau mengacu pada contoh di bawah ini,
some-repo.co.id/donixo/hellp/lala.
susu/jinx.go:
package susu
import "some-repo.co.id/donixo/hellp/lala"
func Jinx() string {
return lala.Ahoy() + " jinx!"
}