Lompati ke konten utama
eLearner.app

Kursus interaktif

Pergi Kursus

Pelajari Go dari awal, dalam bahasa Inggris. Latihan dengan validasi statis dan tautan langsung ke Go Playground resmi untuk menjalankan kode Anda pada kompiler sebenarnya.

Verifikasi statis melalui kata kunci + eksekusi pada pejabatGo Playground(satu klik untuk menyalin kode + membuka).

01 · Modul 1 — Dasar-dasar bahasa

5 pelajaran

Dasar-dasarnya: paket, variabel, tipe, konstanta, operator, dan input/output dengan paket fmt.

  1. 1.1Variabel dan tipevar, deklarasi singkat `:=`, tipe dasar (int, float64, string, bool), dan konsep pengetikan statis.~10 min
  2. 1.2Nilai nol dan ketik konversiSetiap variabel memiliki nilai default; konversinya eksplisit (`int(x)`, `string(b)`).~10 min
  3. 1.3Konstanta dan sedikit pun`const`, konstanta yang tidak diketik, dan pola `iota` untuk menghasilkan enumerasi yang dapat dibaca.~10 min
  4. 1.4OperatorAritmatika, perbandingan, logis, dan bitwise; keutamaan dan perbedaan dari bahasa lain.~8 min
  5. 1.5Masukan/keluaran dengan fmt`fmt.Println`, `fmt.Printf`, format kata kerja (`%d`, `%s`, `%v`, `%T`) dan kapan harus memilih salah satu dari yang lain.~10 min

02 · Modul 2 - Aliran kontrol

5 pelajaran

Keputusan dan pengulangan: if dengan pernyataan init, `untuk` tunggal, peralihan idiomatik, dan penanganan kesalahan eksplisit.

  1. 2.1pernyataan if, else, dan init`jika v := f(); v > 0 { ... }` dan mengapa Go tidak memiliki operator ternary.~10 min
  2. 2.2untuk: satu-satunya loopTiga bentuk `untuk`: tiga klausa, kondisi tunggal (= sementara), dan tak terbatas; menggunakan `break` dan `lanjutkan`.~10 min
  3. 2.3untuk...jarakUlangi irisan, peta, dan string; nilai yang dikembalikan adalah salinan, kapan harus mengabaikan indeks atau nilai dengan `_`.~10 min
  4. 2.4Sakelar idiomatisTidak ada kesalahan implisit, ekspresi kompleks dalam kasus, beralih tanpa kondisi sebagai rantai jika.~10 min
  5. 2.5Kesalahan: pola `if err != nil`Kesalahan adalah nilai; pola dasar `if err != nil { return err }` dan mengapa Go tidak memiliki pengecualian.~12 min

03 · Modul 3 — Fungsi

5 pelajaran

Berfungsi sebagai warga kelas satu: tanda tangan, pengembalian berganda, parameter variadik, penutupan, dan `penundaan`.

  1. 3.1Tanda tangan dan parameterSintaks `func name(p type) type`, pass-by-value secara default, parameter dengan tipe yang sama dikelompokkan bersama.~10 min
  2. 3.2Pengembalian berganda dan pengembalian bernamaMengembalikan beberapa nilai (`nilai, err`), pola pengembalian bernama, dan kapan TIDAK menggunakannya.~12 min
  3. 3.3Fungsi variadik`func sum(nums ...int) int`, menyebarkan irisan dengan `slice...`, contoh dari stdlib.~10 min
  4. 3.4Penutupan dan berfungsi sebagai nilaiFungsi anonim yang menangkap variabel dari konteks sekitarnya; adaptor dan pola pabrik.~12 min
  5. 3.5`defer`: jaminan pembersihanTunda eksekusi sampai kembali; pola `defer f.Close()`, urutan LIFO, gotcha di dalam loop.~12 min

04 · Modul 4 — Koleksi

5 pelajaran

Array, irisan (struktur paling penting), peta, rune di dalam string, dan pengurutan.

  1. 4.1Array dengan panjang tetapSintaks `[N]T`, mengapa array nyata jarang digunakan di Go, konversi dari array ke irisan.~8 min
  2. 4.2Irisan: struktur idiomatik`make`, `append`, len/cap, slicing `s[a:b]`, berbagi array yang mendasarinya, dan kapan harus menyalin.~15 min
  3. 4.3Peta: kunci dan nilaiDeklarasi, akses koma-ok (`v, ok := m[k]`), `hapus`, iterasi non-deterministik.~12 min
  4. 4.4String, byte, dan runeString adalah UTF-8 byte; `range` menghasilkan rune; `len()` menghitung byte, bukan karakter.~12 min
  5. 4.5Menyortir dengan paket sortir`sort.Ints`, `sort.Strings`, `sort.Slice` dengan fungsi perbandingan, stabilitas.~10 min

05 · Modul 5 — Struktur dan metode

5 pelajaran

Tipe data komposit: struct, metode pada penerima nilai atau penunjuk, komposisi (tanpa pewarisan), dan tag.

  1. 5.1Mendefinisikan dan menggunakan struct`ketik Orang struct { String nama; Age int }`, inisialisasi posisi vs bernama, struct anonim.~12 min
  2. 5.2Metode: nilai vs penerima penunjuk`func (p Orang) Halo()` vs `func (p *Orang) Ganti nama(n string)`; kapan harus menggunakan salah satunya.~14 min
  3. 5.3Komposisi (penyematan)Go tidak memiliki warisan: Anda menulis dengan menyematkan satu tipe ke dalam tipe lainnya. Promosi metode.~12 min
  4. 5.4Tag bidang dan JSON`json:"name,omitempty"`, menyusun/membatalkan marshalling dengan `encoding/json`, kesalahan umum.~12 min
  5. 5.5Pola konstruktor `Baru...`Go tidak memiliki konstruktor: konvensinya adalah fungsi `NewT(...) *T` yang memvalidasi dan mengembalikan kesalahan.~10 min

06 · Modul 6 — Antarmuka

5 pelajaran

Antarmuka struktural (tanpa implementasi eksplisit), pernyataan, sakelar tipe, dan antarmuka `Stringer` dan `error` standar.

  1. 6.1Antarmuka: mendefinisikan suatu perilakuAntarmuka adalah sekumpulan metode; siapa pun yang mengimplementasikannya akan memuaskannya secara otomatis (pengetikan bebek statis).~12 min
  2. 6.2Ketik pernyataan`v, ok := i.(*MyT)`, bentuk koma-ok untuk menghindari kepanikan, kapan harus memilih pernyataan daripada saklar tipe.~10 min
  3. 6.3Ketik saklar`switch v := x.(type) { case int: ... }` untuk dikirim pada tipe runtime.~10 min
  4. 6.4Antarmuka StringerMenerapkan `String() string` akan mengubah cara `fmt.Println` merepresentasikan tipe Anda.~10 min
  5. 6.5Antarmuka kesalahan`kesalahan` hanyalah `Kesalahan() string`; membuat kesalahan khusus, `errors.Is`, `errors.As`, `fmt.Errorf("%w", err)`.~14 min

07 · Modul 7 — Konkurensi

5 pelajaran

Model konkurensi Go: goroutine ringan, saluran komunikasi, `pilih`, sinkronisasi, dan konteks.

  1. 7.1Goroutine: paralelisme ringan`go f()`, biaya goroutine, alasan utama keluar tanpa menunggu, dan cara melakukan sinkronisasi.~12 min
  2. 7.2Saluran: komunikasi yang diketik`ch := make(chan int)`, `ch <- v`, `v := <-ch`, saluran buffered vs unbuffered, ditutup.~15 min
  3. 7.3`pilih`: saluran multiplexingTunggu saluran siap pertama, case `default` untuk menghindari pemblokiran, pola batas waktu dengan `time.After`.~12 min
  4. 7.4`sinkronisasi.Mutex` dan `sinkronisasi.WaitGroup`Ketika saluran tidak cukup: lindungi status bersama dengan Mutex, tunggu N goroutine dengan WaitGroup.~14 min
  5. 7.5`context.Context`: pembatalan dan tenggat waktuMenyebarkan pembatalan di seluruh goroutine, `context.WithTimeout`, `ctx.Done()`, pola parameter pertama.~14 min

08 · Modul 8 — Pustaka standar penting

5 pelajaran

Paket yang akan Anda gunakan setiap hari: fmt, strings, strconv, io, os, time, coding/json.

  1. 8.1`fmt` tingkat lanjut`Sprintf`, `Fprintf`, kata kerja `%+v` dan `%#v`, format lebar dan presisi, tanda `-` dan `0`.~10 min
  2. 8.2`string` dan `strconv``strings.Contains/Split/Join/TrimSpace`, `strconv.Itoa/Atoi/ParseInt/FormatFloat`.~12 min
  3. 8.3`io` dan `os`: file dan aliran`os.Open/Create/ReadFile/WriteFile`, antarmuka `io.Reader/Writer`, pola `defer f.Close()`.~14 min
  4. 8.4Paket `waktu``time.Now()`, durasi, penguraian dengan tata letak referensi `02-01-2006 15:04:05`, pengatur waktu dan ticker.~12 min
  5. 8.5`pengkodean/json``json.Marshal/Unmarshal`, tag struct, `json.Decoder/Encoder` untuk streaming, kesalahan penguraian.~14 min

09 · Modul 9 — Tes, modul, dan perkakas

5 pelajaran

Alat `go test`, pengujian berbasis tabel, tolok ukur, manajemen ketergantungan dengan `go mod`, dan tag build.

  1. 9.1Paket `pengujian`File `*_test.go`, fungsi `Testxxx(t *testing.T)`, `t.Error` vs `t.Fatal`, `go test ./...`.~12 min
  2. 9.2Tes berdasarkan tabelPola idiomatik: sepotong struct anonim dengan masukan dan keluaran yang diharapkan, `t.Run(name, ...)` untuk subtes.~14 min
  3. 9.3Tolok ukur dan profilFungsi `Benchmarkxxx(b *testing.B)`, `untuk i := 0; saya < b.n; i++` loop, `pergi tes -bench=.`.~12 min
  4. 9.4Pergi modul`go mod init`, `go get`, versi impor semantik, file kunci `go.sum`, `go mod rapi`.~12 min
  5. 9.5Bangun batasan dan tagDirektif `//go:build ...` untuk build lintas platform, memisahkan kode pengujian/integrasi, contoh dunia nyata.~10 min

10 · Modul 10 — Latihan idiomatik

5 pelajaran

Penamaan, penanganan kesalahan tingkat lanjut, generik (Go 1.18+), dan dua proyek mini: CLI dan server HTTP.

  1. 10.1Konvensi dan gaya penamaanPascalCase untuk ekspor, camelCase untuk lokal, nama pendek dalam cakupan pendek, `gofmt` tidak dapat dinegosiasikan.~10 min
  2. 10.2Penanganan kesalahan idiomatisKesalahan penjaga (`io.EOF`), kesalahan khusus dengan `Buka bungkus`, pembungkusan dengan `%w`, kapan harus menggunakan `panik`.~14 min
  3. 10.3Generik (Go 1.18+)Ketik parameter `func Map[T, U any](s []T, f func(T) U) []U`, batasan (`comparable`, custom), trade-off.~15 min
  4. 10.4Proyek mini: CLI dengan flagPaket `flag`, perintah dan sub-perintah, kode keluar, `log` vs `fmt` untuk keluaran.~18 min
  5. 10.5Proyek mini: server HTTP`net/http`, handler dan router minimal, middleware sebagai dekorator, shutdown yang anggun dengan konteks.~18 min