Skip to content

Code Style

Dokumen ini berisi pedoman penulisan kode Go (Golang) untuk menjaga konsistensi, keterbacaan, dan kualitas kode di seluruh proyek.


  • Gunakan nama singkat dan deskriptif, huruf kecil semua.

  • Jangan gunakan underscore (_) atau camelCase.

    ✅ Contoh:

    package user
    package httpserver

    ❌ Hindari:

    package user_service
    package UserHandler
  • 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,y Contoh:

    var userCount int
    func 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)
    }

Gunakan huruf besar dengan underscore.

const MAX_RETRY = 3
const DEFAULT_TIMEOUT = 30 * time.Second

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
}

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).

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)
AspekAturan
Baris maksimal120 karakter
IndentasiTab (bawaan Go)
ImportsKelompokkan: stdlib, third-party, internal
ErrorHindari pesan yang diawali huruf besar atau tanda titik di akhir
LoggingGunakan level yang sesuai (Info, Warn, Error)
LoopingGunakan nama variabel yang merepresentasikan data secara jelas