75. Pengenalan Go-Modules & Semantic Versioning
Konsep pengelolaan dependency modern di Go, struktur file go.mod, go.sum, dan aturan Semantic Versioning (vMAJOR.MINOR.PATCH).
Apa itu Go-Modules?
Go-Modules adalah sistem manajemen dependency resmi yang diperkenalkan di Go versi 1.11+ dan menjadi standar wajib sejak Go 1.13+.
Sebelum adanya Go-Modules, semua proyek Go wajib disimpan di dalam folder terpusat GOPATH/src. Dengan Go-Modules, Anda bebas menaruh folder proyek di lokasi direktori mana saja!
Dua File Utama Go-Modules:
go.mod: Manifestasi utama proyek yang berisi nama module, versi SDK Go yang digunakan, serta daftar dependency eksternal.go.sum: Catatan hash cryptographic (checksum validation) untuk memastikan keamanan dan integritas berkas dependency yang diunduh agar tidak diubah secara jahat.
Aturan Semantic Versioning (SemVer):
Pengelolaan versi modul di Go mengikuti aturan vMAJOR.MINOR.PATCH (misal: v1.2.3):
| Komponen Versi | Contoh | Kapan Dinaikkan / Diubah |
|---|---|---|
| MAJOR (X) | v2.0.0 | Saat terjadi Breaking Changes (perubahan API yang merusak backward compatibility kode lama). |
| MINOR (Y) | v1.3.0 | Saat ada penambahan fitur baru yang tetap backward compatible. |
| PATCH (Z) | v1.2.4 | Saat ada perbaikan bug (bugfix) yang tetap backward compatible. |
Contoh program
package main
import "fmt"
func main() {
fmt.Println("=== MODUL 3: GOLANG MODULES ===")
fmt.Println("Semantic Versioning Format: vMAJOR.MINOR.PATCH (contoh: v1.4.2)")
fmt.Println("File go.mod mencatat dependency, file go.sum mencatat hash checksum keamanan.")
}
76. Membuat Module Baru & Inisialisasi
Perintah 'go mod init', penamaan modul berbasis URL repositori (misal github.com/user/app), dan pembuatan fungsi exported.
Membuat Module Baru
Untuk menginisialisasi modul Go baru, jalankan perintah terminal go mod init nama-module.
Sangat direkomendasikan menggunakan lokasi alamat repositori Git publik sebagai nama modul, contohnya: github.com/programmerzamannow/go-say-hello. Ini memudahkan orang lain untuk mengunduh modul Anda melalui perintah go get.
# 1. Buat folder baru mkdir go-say-hello cd go-say-hello # 2. Inisialisasi modul go mod init github.com/programmerzamannow/go-say-hello
Contoh program
package main
import "fmt"
// Fungsi ini diawali Huruf KAPITAL agar Exported (Public)
func SayHello(name string) string {
return "Hello " + name + ", Selamat Datang di Go Modules!"
}
func main() {
fmt.Println(SayHello("Eko"))
}
77. Release Module ke Git & GitHub
Mempublikasikan modul ke repositori publik, membuat Git Tag release (git tag v1.0.0), dan pengindeksan di pkg.go.dev.
Mempublikasikan Modul ke GitHub
Agar modul Go Anda dapat digunakan oleh programmer di seluruh dunia, Anda perlu mendorong (*push*) kode ke GitHub dan memberikan **Git Tag** sebagai penanda versi rilis.
# 1. Push kode ke GitHub git add . git commit -m "First release version v1.0.0" git push origin main # 2. Buat Tag Release v1.0.0 git tag v1.0.0 # 3. Push Tag ke Remote GitHub git push origin v1.0.0
Contoh program
package main
import "fmt"
func main() {
fmt.Println("Langkah Rilis Modul Go:")
fmt.Println("1. Commit kode terbaru")
fmt.Println("2. Buat tag rilis: git tag v1.0.0")
fmt.Println("3. Push tag ke GitHub: git push origin v1.0.0")
}
78. Menambah Dependency Eksternal
Mengunduh dan memasukkan library eksternal ke proyek dengan 'go get' dan mengimpor modul di kode.
Menambahkan Dependency dengan 'go get'
Untuk menggunakan modul publik milik orang lain di proyek kita, jalankan perintah go get nama-modul.
# Mengunduh modul eksternal go get github.com/programmerzamannow/go-say-hello
Perintah tersebut akan otomatis mengunduh modul ke cache lokal, mencatat baris require di go.mod, dan menambahkan checksum ke go.sum.
Contoh program
package main
import (
"fmt"
// Contoh mengimpor modul eksternal yang di-get
// "github.com/programmerzamannow/go-say-hello"
)
func main() {
fmt.Println("Perintah 'go get <path>' digunakan untuk mengunduh modul eksternal.")
fmt.Println("Modul terunduh otomatis dicatat di file go.mod dan go.sum.")
}
79. Upgrade Minor & Patch Release
Memperbarui modul dengan menambahkan fitur baru (minor release v1.1.0) atau perbaikan bug (patch release v1.0.1).
Upgrade Versi Minor & Patch
Jika kita memperbarui modul tanpa merusak fungsi yang sudah ada (misal menambahkan fungsi SayHelloTo() baru), kita dapat menaikkan versi minor:
# Rilis versi Minor baru v1.1.0 git add . git commit -m "Add new function SayHelloTo" git tag v1.1.0 git push origin v1.1.0
Di sisi aplikasi pengguna (*client*), untuk memperbarui ke versi minor terbaru, cukup jalankan:
go get github.com/programmerzamannow/[email protected]
Contoh program
package main
import "fmt"
func main() {
fmt.Println("Update versi Minor (v1.1.0) menambah fitur tanpa merusak fungsi lama.")
fmt.Println("Gunakan 'go get <module>@v1.1.0' untuk menentukan spesifik versi yang ingin digunakan.")
}
80. Meng-upgrade & Membersihkan Dependency
Perintah 'go get -u', 'go mod tidy' (membersihkan dependency tidak terpakai), dan 'go mod verify'.
Pemeliharaan Dependency Go-Modules
Go menyediakan perintah pemeliharaan otomatis yang sangat berguna:
| Perintah CLI | Fungsi Utama |
|---|---|
go get -u | Meng-upgrade seluruh dependency di go.mod ke versi minor/patch terbaru secara otomatis. |
go mod tidy | Sangat Penting! Membersihkan dependency yang tidak lagi di-import dan mengunduh dependency yang belum tercatat. |
go mod verify | Memeriksa apakah isi modul lokal masih cocok dengan hash checksum keamanan di go.sum. |
Contoh program
package main
import "fmt"
func main() {
fmt.Println("Perintah Pemeliharaan Module:")
fmt.Println("1. 'go mod tidy' -> Membersihkan dependency nganggur & merapikan go.mod")
fmt.Println("2. 'go get -u' -> Upgrade semua library ke minor/patch rilis terbaru")
fmt.Println("3. 'go mod verify'-> Memeriksa integritas hash go.sum")
}