Cheat Sheet Go
Terakhir diperbarui
Hello World & struktur program
Setiap program Go berada di dalam sebuah package; titik masuknya adalah func main di package main.
| Operasi | Sintaks |
|---|---|
| Deklarasi package | package main |
| Mengimpor package | import "fmt" |
| Mengimpor beberapa package | import (\n "fmt"\n "os"\n) |
| Titik masuk program | func main() { ... } |
| Mencetak satu baris | fmt.Println("Hello, World!") |
| Mencetak dengan format | fmt.Printf("%d items\n", n) |
| Menjalankan file | go run main.go |
| Membuat binary | go build |
Variabel & tipe
Go bertipe statis, tetapi bisa menyimpulkan tipe dengan :=.
| Operasi | Sintaks |
|---|---|
| Deklarasi dengan tipe | var age int = 30 |
| Deklarasi dengan inferensi | var name = "Ada" |
| Deklarasi singkat | count := 0 |
| Beberapa sekaligus | x, y := 1, 2 |
| Konstanta | const Pi = 3.14 |
| Zero value | 0, "", false, nil |
| Tipe dasar | int, float64, string, bool, byte, rune |
| Konversi tipe | f := float64(i) |
Alur kontrol
Go hanya punya satu kata kunci perulangan, yaitu for, dan tidak memakai tanda kurung di sekitar kondisi.
| Operasi | Sintaks |
|---|---|
| If / else | if x > 0 { ... } else { ... } |
| If dengan pernyataan inisialisasi | if v, ok := m[k]; ok { ... } |
| For loop (gaya C) | for i := 0; i < 10; i++ { ... } |
| Perulangan gaya while | for x < 100 { ... } |
| Perulangan tak terbatas | for { ... } |
| Range pada slice | for i, v := range items { ... } |
| Switch | switch day { case 1: ...; default: ... } |
| Switch tanpa ekspresi | switch { case x > 0: ... } |
| Break / continue | break, continue |
Fungsi
Fungsi adalah nilai first-class dan bisa mengembalikan beberapa hasil.
| Operasi | Sintaks |
|---|---|
| Fungsi dasar | func add(a int, b int) int { return a + b } |
| Tipe parameter bersama | func add(a, b int) int { ... } |
| Beberapa nilai kembalian | func divmod(a, b int) (int, int) { return a / b, a % b } |
| Nilai kembalian bernama | func split(sum int) (x, y int) { x = sum / 2; return } |
| Fungsi variadic | func sum(nums ...int) int { ... } |
| Fungsi anonim | f := func() { ... } |
| Closure | func counter() func() int { ... } |
| Defer (dijalankan saat return) | defer file.Close() |
Slice & array
Array punya ukuran tetap; slice adalah tampilan dinamis atas array.
| Operasi | Sintaks |
|---|---|
| Array berukuran tetap | var a [3]int |
| Literal slice | nums := []int{1, 2, 3} |
| Membuat slice dengan make | s := make([]int, 0, 10) |
| Append | s = append(s, 4) |
| Panjang / kapasitas | len(s), cap(s) |
| Memotong slice | s[1:3] |
| Menyalin | copy(dst, src) |
| Iterasi | for i, v := range s { ... } |
Map
Map adalah hash table bawaan Go.
| Operasi | Sintaks |
|---|---|
| Membuat map dengan make | m := make(map[string]int) |
| Literal map | m := map[string]int{"a": 1, "b": 2} |
| Mengisi nilai | m["c"] = 3 |
| Mengambil nilai | v := m["a"] |
| Memeriksa keberadaan | v, ok := m["x"] |
| Menghapus key | delete(m, "a") |
| Panjang | len(m) |
| Iterasi | for k, v := range m { ... } |
Struct & method
Struct mengelompokkan field; method menempelkan perilaku lewat receiver.
| Operasi | Sintaks |
|---|---|
| Mendefinisikan struct | type Point struct { X, Y int } |
| Membuat instance | p := Point{X: 1, Y: 2} |
| Mengakses field | p.X |
| Pointer ke struct | p := &Point{1, 2} |
| Method dengan value receiver | func (p Point) Dist() float64 { ... } |
| Method dengan pointer receiver | func (p *Point) Move(dx int) { p.X += dx } |
| Struct tertanam (embedded) | type Circle struct { Point; R int } |
| Struct tag | Name string dengan tag json:"name" di dalam backtick |
Interface
Interface dipenuhi secara implisit: tipe apa pun yang punya method yang tepat memenuhi syarat.
| Operasi | Sintaks |
|---|---|
| Mendefinisikan interface | type Shape interface { Area() float64 } |
| Mengimplementasikan (implisit) | func (c Circle) Area() float64 { ... } |
| Interface kosong (any) | var x interface{} atau var x any |
| Type assertion | s, ok := x.(string) |
| Type switch | switch v := x.(type) { case int: ... } |
| Interface Stringer | func (p Point) String() string { ... } |
Goroutine & channel
Goroutine adalah thread ringan; channel mengirim nilai di antara goroutine.
| Operasi | Sintaks |
|---|---|
| Memulai goroutine | go doWork() |
| Membuat channel | ch := make(chan int) |
| Channel dengan buffer | ch := make(chan int, 5) |
| Mengirim ke channel | ch <- 42 |
| Menerima dari channel | v := <-ch |
| Menutup channel | close(ch) |
| Range pada channel | for v := range ch { ... } |
| Select pada channel | select { case v := <-ch: ...; default: ... } |
| Wait group | var wg sync.WaitGroup; wg.Add(1); wg.Wait() |
| Mutex | var mu sync.Mutex; mu.Lock(); mu.Unlock() |
Penanganan error
Go mengembalikan error sebagai nilai; tidak ada exception.
| Operasi | Sintaks |
|---|---|
| Mengembalikan error | func read() (string, error) { return "", err } |
| Memeriksa error | if err != nil { return err } |
| Membuat error | errors.New("not found") |
| Error dengan format | fmt.Errorf("bad id %d", id) |
| Membungkus error | fmt.Errorf("load: %w", err) |
| Membuka bungkus / mencocokkan | errors.Is(err, os.ErrNotExist) |
| Mencocokkan berdasarkan tipe | errors.As(err, &target) |
| Panic / recover | defer func() { recover() }() |
Sintaks Go yang paling sering kamu pakai, dalam satu halaman. Cheat sheet Go ini adalah referensi cepat untuk inti bahasanya: variabel dan tipe, slice dan map, struct dan interface, ditambah goroutine dan channel yang membuat Golang unggul dalam concurrency.
Semua yang ada di sini adalah Go standar dan bisa kamu compile dengan toolchain resmi. Salin yang kamu butuhkan, atau coba setiap potongan kode langsung di playground Go, tanpa perlu instalasi. Sedang belajar Go? Kursus Go interaktif gratis dari Coddy membahas slice, struct, interface, dan goroutine langkah demi langkah.
FAQ cheat sheet Go
Apakah cheat sheet Go ini gratis?
Ya. Cheat sheet Go ini sepenuhnya gratis, tanpa perlu daftar. Simpan di bookmark dan kembali kapan pun kamu perlu mencari operasi slice, pola channel, atau method struct.
Apa perbedaan := dan var di Go?
var x = 0 mendeklarasikan variabel dan bisa dipakai di mana saja, termasuk di tingkat package. x := 0 adalah deklarasi variabel singkat: sekaligus mendeklarasikan dan mengisi nilai, menyimpulkan tipenya, dan hanya bisa dipakai di dalam fungsi. Pakai var saat kamu butuh tipe eksplisit atau variabel tingkat package, dan := untuk deklarasi lokal yang ringkas.Apa itu goroutine dan channel?
go someFunc(). Channel adalah pipa bertipe yang membuat goroutine bisa berkomunikasi dengan aman: satu goroutine mengirim dengan ch <- v dan goroutine lain menerima dengan <-ch. Bersama-sama, keduanya adalah model concurrency inti Go, yang dirangkum dalam semboyan "share memory by communicating" (berbagi memori dengan berkomunikasi).Bisakah saya berlatih Go secara online?
Bisa. Buka playground Go untuk menjalankan potongan kode apa pun dari cheat sheet ini di browsermu, tanpa perlu menginstal toolchain Go. Kalau kamu ingin belajar terarah, kursus Go interaktif gratis dari Coddy membawamu dari variabel dan slice sampai goroutine dan channel, langkah demi langkah.
Apakah cheat sheet ini cocok untuk pemula?
Cocok. Isinya disusun mulai dari topik yang paling umum (variabel, alur kontrol, fungsi) sampai yang lanjutan (goroutine, channel, penanganan error), jadi kamu bisa memakai bagian atas sejak hari pertama dan pelan-pelan menguasai sisanya.