Kodeloka
  1. Kodeloka
  2. Kelas Golang
  3. Materi

Domain 3 · 6 bab

Go Modules & Dependency

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 VersiContohKapan Dinaikkan / Diubah
MAJOR (X)v2.0.0Saat terjadi Breaking Changes (perubahan API yang merusak backward compatibility kode lama).
MINOR (Y)v1.3.0Saat ada penambahan fitur baru yang tetap backward compatible.
PATCH (Z)v1.2.4Saat 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.")
}

Praktik dan kuis bab ini di kelas interaktif →

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.

💡 Best Practice Penamaan 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.

Terminal
# 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"))
}

Praktik dan kuis bab ini di kelas interaktif →

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.

Terminal Command (Git Tagging)
# 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")
}

Praktik dan kuis bab ini di kelas interaktif →

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.

Terminal Command
# 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.")
}

Praktik dan kuis bab ini di kelas interaktif →

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:

Terminal (Pada Modul Author)
# 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:

Terminal (Pada Modul Client)
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.")
}

Praktik dan kuis bab ini di kelas interaktif →

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 CLIFungsi Utama
go get -uMeng-upgrade seluruh dependency di go.mod ke versi minor/patch terbaru secara otomatis.
go mod tidySangat Penting! Membersihkan dependency yang tidak lagi di-import dan mengunduh dependency yang belum tercatat.
go mod verifyMemeriksa 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")
}

Praktik dan kuis bab ini di kelas interaktif →