Jalur ini membahas bahasa Go dari program pertama sampai layanan server dan CLI yang siap diuji: dasar bahasa, error sebagai nilai, struct dan interface, generics, konkurensi goroutine dan channel, pengujian, pustaka standar, sampai praktik profesional dalam satu proyek utuh. Konkurensi dibahas bertahap dalam tiga modul karena inilah pembeda utama Go, dan setiap potongan kode dijalankan nyata sehingga keluarannya dapat direproduksi. Prasyaratnya hanya editor teks dan terminal, sementara lingkungan kerja dan versi yang dipakai tercantum pada metadata halaman ini.
Go
Jalur bahasa Go dari nol sampai membangun layanan server dan CLI siap production: dasar bahasa, error sebagai nilai, interface, generics, konkurensi goroutine dan channel, pengujian, sampai proyek utuh.
0/0 selesai
Modul orientasi: apa itu Go, cara kerja kompiler dan runtime, serta penyiapan lingkungan kerja.
- Apa Itu Go?Sejarah singkat Go dan bidang pemakaian utamanya, dari layanan cloud sampai perangkat CLI.
- Cara Kerja GoKompilasi cepat, biner statis tunggal, dan mental model penjadwal goroutine.
- Penyiapan LingkunganInstalasi Go, GOPATH versus modul, dan editor dengan gopls.
Modul dasar: program pertama, variabel, tipe, konstanta, string, paket fmt, dan budaya gofmt.
- Program PertamaStruktur package main dan func main serta perbedaan go run dan go build.
- Variabel dan Inferensi TipeDeklarasi var, deklarasi pendek :=, dan zero value.
- Tipe DasarTipe int, float, string, bool beserta aturan konversi tipe yang hanya eksplisit.
- Konstanta dan iotaKonstanta bertipe dan tak bertipe serta pola enum dengan iota.
- String dan runeRepresentasi UTF-8 serta perbedaan iterasi per byte dan per rune.
- Paket fmtPrintln, verb Printf, dan Sprintf untuk pemformatan teks.
- Komentar dan gofmtFormat kode sebagai budaya Go dan penulisan komentar dokumentasi.
Modul alur: if dengan pernyataan init, switch tanpa fall-through, dan for sebagai satu-satunya perulangan.
- if dengan Pernyataan initKondisi dengan lingkup variabel terbatas dan ketiadaan operator ternary.
- switchPemilihan tanpa fall-through bawaan dan bentuk switch tanpa ekspresi.
- Perulanganfor sebagai satu-satunya perulangan: tiga bentuk dan range.
Modul fungsi: banyak nilai kembalian, closure, defer, lalu error sebagai nilai sampai panic dan recover.
- FungsiParameter, banyak nilai kembalian, dan hasil bernama.
- Fungsi VariadikParameter ...T dan cara meneruskan argumen ke sana.
- Tipe Fungsi dan ClosureFungsi sebagai nilai dan penangkapan variabel di sekitarnya.
- deferPanggilan tertunda, urutan eksekusinya, dan idiom pembersihan sumber daya.
- Error sebagai NilaiInterface error serta pola mengembalikan dan memeriksa error.
- Pembungkusan Errorfmt.Errorf dengan %w serta errors.Is dan errors.As.
- panic dan recoverKapan panic pantas dipakai dan alasannya bukan alur kontrol.
Modul tipe kumpulan: array, slice secara mendalam beserta bagian dalamnya, peta, dan dasar struct.
- ArrayArray berukuran tetap dan alasan jarang dipakai secara langsung.
- Slice secara Mendalamlen dan cap, pertumbuhan append, serta jebakan aliasing slice.
- Bagian dalam SliceStruct header slice, array penyangga, dan ekspresi full slice.
- PetaPembuatan peta, zero value kunci yang tidak ada, dan idiom comma-ok.
- Peta dalam PraktikKeacakan urutan iterasi, penghapusan entri, dan pola set.
- Dasar structDefinisi struct, literal, dan penyematan field.
Modul struct: receiver, metode pada tipe buatan sendiri, penyematan, tag JSON, dan konstruktor.
- MetodeReceiver nilai versus pointer dan kapan memilih masing-masing.
- Metode pada Tipe Apa PunMetode pada tipe yang didefinisikan sendiri tanpa kelas.
- Penyematan structKomposisi alih-alih pewarisan dan field terpromosi.
- Tag JSONMarshaling struct dengan encoding/json.
- KonstruktorFungsi NewX dan desain zero value.
Modul interface: pemenuhan implisit, interface kecil, interface pustaka standar, type assertion, dan any.
- Dasar InterfacePemenuhan implisit tanpa kata kunci implements.
- Interface KecilFilosofi io.Reader dan io.Writer serta pola terima interface kembalikan struct.
- Interface Pustaka Standar yang UmumStringer, error, sort.Interface, dan komposisi Reader/Writer.
- Type Assertion dan Type SwitchEkspresi x.(T) dan type switch untuk data dinamis.
- Interface Kosong dan anyKapan pengetikan dinamis beralasan dan perbandingannya dengan generics.
Modul generics: parameter tipe, constraint, tipe generik, dan pertimbangan pemakaiannya.
- Parameter TipeFungsi generik dan instansiasi.
- Constraintany, comparable, dan interface constraint kustom.
- Tipe GenerikStruct generik serta helper paket slices dan maps.
- Pertimbangan GenericsKapan generics membantu dibanding interface biasa.
Modul konkurensi pertama: goroutine, detektor race, channel tanpa dan dengan buffer, arah channel, dan select.
- GoroutineKata kunci go, thread ringan, dan intuisi penjadwal.
- Demo Race ConditionFlag -race dan alasan berbagi data menuntut disiplin.
- Dasar ChannelChannel tanpa buffer sebagai alat sinkronisasi.
- Channel dengan BufferSemantik kapasitas dan backpressure.
- Arah ChannelTipe kirim-saja dan terima-saja.
- selectMultiplexing channel dan batas waktu dengan time.After.
Modul konkurensi kedua: WaitGroup, Mutex, Once, atomic, context, dan pola konkurensi kanonik.
- sync.WaitGroupMengoordinasikan penyelesaian goroutine.
- sync.Mutex dan RWMutexMelindungi state bersama versus kepemilikan lewat channel.
- sync.Once dan atomicInisialisasi sekali dan penghitung tanpa lock.
- context.ContextPembatalan, tenggat waktu, dan nilai yang mengalir pada pohon panggilan.
- Pola KonkurensiBentuk kanonik fan-out/fan-in, pipeline, dan worker pool.
Modul pengujian: go test, pola table-driven, subtest, benchmark, test double, dan fuzzing.
- Dasar PengujianPaket testing, go test, dan konvensi penamaan.
- Pengujian Table-DrivenPola pengujian Go yang paling kanonik.
- Subtest dan t.RunKeluaran pengujian tertata dan pengujian paralel.
- BenchmarkFungsi benchmark, b.N, dan pengenalan profil pprof.
- Test DoubleInterface untuk mock dan httptest untuk handler.
- FuzzingTarget fuzz bawaan dan pengujian bergaya properti.
Modul pustaka standar: strings, time, os dan io, JSON, client dan server HTTP, serta CLI dengan flag.
- strings dan strconvManipulasi teks dan parsing bilangan.
- timeDurasi, timer, dan keunikan format waktu Go.
- os dan ioBerkas, Reader/Writer, dan komposisi io.Copy.
- encoding/jsonMarshal dan unmarshal serta dekoder streaming.
- Client net/httpPermintaan GET dan POST serta batas waktu client.
- Server net/httpHandler, pola ServeMux, dan graceful shutdown.
- flag dan cobraPembangunan CLI dan parsing argumen.
Modul profesional: tata letak proyek, modul Go, alat bantu, strategi error dan logging, serta keamanan.
- Tata Letak ProyekKonvensi cmd/, internal/, dan api/.
- Modul Go secara Mendalamgo.mod, pengelolaan versi, dan jalur impor semantik.
- Alat Bantugo vet, staticcheck, dan golangci-lint.
- Strategi Error dan LoggingLogging terstruktur dengan slog dan taksonomi error.
- Petunjuk Keamanan untuk GoPenanganan masukan dan risiko dependensi.
Modul pamungkas: pemilihan proyek, arsitektur paket, dan implementasi yang bebas race serta teruji.
- Pemilihan ProyekMenetapkan lingkup yang melatih konkurensi dan HTTP.
- ArsitekturBatas antar paket dan aliran context.
- Implementasi dan PenguatanProgram bebas race, terukur dengan benchmark, dan teruji.