Code Style
🧭 Panduan Code Style Golang
Section titled “🧭 Panduan Code Style Golang”Dokumen ini berisi pedoman penulisan kode Go (Golang) untuk menjaga konsistensi, keterbacaan, dan kualitas kode di seluruh proyek.
📦 Penamaan
Section titled “📦 Penamaan”-
Gunakan nama singkat dan deskriptif, huruf kecil semua.
-
Jangan gunakan underscore (_) atau camelCase.
✅ Contoh:
package userpackage httpserver❌ Hindari:
package user_servicepackage UserHandler
Variabel & Fungsi
Section titled “Variabel & Fungsi”-
Gunakan camelCase untuk nama variabel dan fungsi privat.
-
Gunakan PascalCase untuk fungsi atau variabel publik (dieksport).
-
Nama variabel harus jelas dan sesuai makna, jangan membuat nama variabel misal
x,yContoh:var userCount intfunc getUser() {}func GetUserByID() {} -
Gunakan nama variabel yang deskriptif dalam looping.
✅ Contoh baik:
for _, user := range users {fmt.Println(user.Name)}for i, order := range orders {log.Printf("Order #%d: %v", i, order)}❌ Hindari:
for _, x := range users {fmt.Println(x.Name)}for _, v := range orders {log.Println(v)}
Konstanta
Section titled “Konstanta”Gunakan huruf besar dengan underscore.
const MAX_RETRY = 3const DEFAULT_TIMEOUT = 30 * time.Second⚙️ Error Handling
Section titled “⚙️ Error Handling”Gunakan errors.Is dan errors.As
Daripada membandingkan string error secara langsung.
if errors.Is(err, io.EOF) { return nil}Bungkus Error dengan konteks
Gunakan fmt.Errorf dengan %w untuk melacak error chain.
return fmt.Errorf("failed to read config: %w", err)Lakukan Log Setiap Error Gunakan plugin zaplog untuk melakukan loging di setiap ada error.
✅ Contoh baik:
startDate, err := time.Parse("2006-01-02", req.StartDate) if err != nil { zap.L().Error("error parse start date", zap.Error(err)) return nil, err }❌ Hindari:
startDate, err := time.Parse("2006-01-02", req.StartDate) if err != nil { zap.L().Error("error parse start date", zap.Error(err)) return nil, err }📚 Komentar dan Dokumentasi
Section titled “📚 Komentar dan Dokumentasi”Gunakan komentar godoc style untuk fungsi, tipe, dan variabel publik.
// GetUserByID mengembalikan data user berdasarkan ID.func GetUserByID(id int) (*User, error) { ...}Komentar sebaiknya menjelaskan mengapa kode ditulis demikian, bukan apa yang dilakukan (karena itu sudah terlihat dari kode).
🧠 Kode Bersih dan Idiomatik
Section titled “🧠 Kode Bersih dan Idiomatik”Gunakan return awal
Kurangi nesting berlebih dengan return awal untuk kondisi error.
if err != nil { return err}Hindari variabel yang tidak terpakai
Gunakan _ hanya jika benar-benar dibutuhkan.
Gunakan slice dan map dengan make untuk efisiensi
users := make([]User, 0, 10)📏 Konvensi Tambahan
Section titled “📏 Konvensi Tambahan”| Aspek | Aturan |
|---|---|
| Baris maksimal | 120 karakter |
| Indentasi | Tab (bawaan Go) |
| Imports | Kelompokkan: stdlib, third-party, internal |
| Error | Hindari pesan yang diawali huruf besar atau tanda titik di akhir |
| Logging | Gunakan level yang sesuai (Info, Warn, Error) |
| Looping | Gunakan nama variabel yang merepresentasikan data secara jelas |