Lompati ke konten utama
Modul 10 · Pelajaran 1 dari 546/50 dalam kursus~10 min
Pelajaran modul (1/5)

Konvensi dan gaya penamaan

Go memiliki konvensi penamaan dan gaya yang kuat dan tidak dapat dinegosiasikan: pemformat resmi gofmt (dan supersetnya goimports) menentukan indentasi, spasi, dan urutan impor. Gaya berdiskusi dianggap di luar topik: Anda menjalankan gofmt -w dan melanjutkan. Ini membebaskan energi untuk masalah yang lebih menarik.

Visibilitas: huruf besar atau kecil

Tidak ada public/private kata kunci. Huruf pertama nama menentukan visibilitas:

  • Huruf Besar → diekspor ke luar paket (User, Login, MaxRetries).
  • Huruf kecil → pribadi untuk paket (user, parseLine, defaultTimeout).

Hal ini berlaku untuk: tipe, fungsi, metode, variabel, konstanta, bidang struct.

Go
type User struct {
    Name  string  // exported
    email string  // private to the package
}

Bidang struct "pribadi" tidak diserialkan oleh encoding/json (lihat Modul 8), dan tidak dapat diakses dari pengujian di pkg_test.

CamelCase, tidak pernah ular_case

Tidak ada garis bawah pada nama multi-kata:

  • ✅ HTTPClient, userName, parseRequest
  • ❌ Http_Client, user_name, parse_request

Akronim menggunakan huruf besar semua (atau huruf kecil semua, jika dalam lingkup pribadi):

  • ✅ URL, ID, HTML, JSON, parseURL, userID
  • ❌ Url, Id, Html, Json, parseUrl, userId
Go
type APIResponse struct {
    UserID  int
    HTMLURL string
}

Nama pendek untuk cakupan pendek

Gaya Go mengutamakan singkatnya dengan kejelasan yang sama dalam cakupan yang sempit:

Go
// idiomatic
for i, v := range items { ... }
for k, v := range m { ... }

if err := f(); err != nil { ... }

func (s *Server) Serve(w http.ResponseWriter, r *http.Request) { ... }

Konvensi yang ditetapkan:

  • i, j, k untuk indeks loop.
  • v untuk nilai, k untuk kunci.
  • r untuk *Request/io.Reader, w untuk Writer/ResponseWriter.
  • err untuk kesalahan.
  • ctx untuk context.Context.
  • Penerima metode: 1–2 huruf yang konsisten di seluruh jenis (s *Server, u *User). Tidak pernah this atau self.

Semakin luas cakupannya, semakin deskriptif namanya: count lokal boleh saja, namun variabel Count yang diekspor akan memberi tahu Anda apa yang diperhitungkan.

Tidak ada awalan "I" pada antarmuka, tidak ada akhiran "Impl".

Go
// idiomatic
type Reader interface { ... }
type fileReader struct { ... } // concrete implementation

// not idiomatic
type IReader interface { ... }
type ReaderImpl struct { ... }

Antarmuka kecil sering kali menggunakan akhiran -er: Reader, Writer, Stringer, Closer. Ini menggemakan fakta bahwa mereka mendeskripsikan suatu perilaku (idealnya satu metode).

Nama paket

Sebuah paket memiliki satu nama, pendek, semua huruf kecil, tanpa garis bawah:

  • ✅ bytes, http, os, userauth
  • ❌ userAuth, user_auth, UserAuth

Nama paket adalah awalan penggunaan dari simbolnya: bytes.Buffer, http.Client. Jadi user.User mubazir: lebih baik ganti nama jenisnya (user.Account) atau paketnya.

gofmt tidak dapat diperdebatkan

gofmt memberlakukan:

  • Indentasi dengan tab (bukan spasi).
  • Tempelkan tanda kurung { pada baris yang sama dengan tanda tangan.
  • Impor secara berkelompok dipisahkan dengan garis kosong; goimports juga menambahkan impor yang hilang.
  • Ruang di sekitar operator.

Selalu jalankan sebelum melakukan:

Bash
go fmt ./...
goimports -w .
go vet ./...

Linter (staticcheck, golangci-lint) menambahkan aturan tambahan (variabel yang tidak digunakan, bayangan, perbandingan tidak berguna, ...).

Latihan

Latihan#go.m10.l1.e1
Upaya: 0Memuat…

Buka struct Http_Client di HTTPClient (dan Url dalam URL) setelah itu konvensi Lanjutkan ke akronim berikut.

Memuat editor…

Solusi tersedia setelah 3 upaya

Latihan#go.m10.l1.e2
Upaya: 0Memuat…

Balikkan visibilitas: rendi Nama pengguna esportato (maiuscolo) dan kata sandi pribadi (minuscolo).

Memuat editor…

Solusi tersedia setelah 3 upaya

Quiz#go.m10.l1.e3
Siap

Apa nama ini dan idiomatis di Go untuk jenis olahraga 'server HTTP'?

Go
type ??? struct {}
Pilihan jawaban