Go adalah bahasa pemrograman open source yang dikembangkan di Google dengan fokus pada kesederhanaan, kecepatan kompilasi, dan dukungan concurrency bawaan. Pada Course ini, kita akan mempelajari Go secara bertahap: mulai dari instalasi dan program pertama, dasar bahasa, struct, interface, dan error handling, lalu naik ke concurrency dengan goroutine dan channel, testing, REST API, database, hingga deployment ke production. Seluruh contoh kode pada Course ini ditulis dan diuji menggunakan Go 1.27.
Bab 1 Pengantar Go
Kenali karakteristik Go: bahasa yang dikompilasi, statically typed, dan dirancang untuk software modern.
Buka → # Sejarah dan Filosofi GoTelusuri kelahiran Go di Google dan prinsip kesederhanaan yang membentuk desainnya.
Buka → # Kelebihan dan Batasan GoPahami kekuatan Go dan kondisi yang membuat Go kurang cocok dipilih.
Buka → # Use Case GoLihat bidang yang paling banyak memakai Go: backend service, CLI, DevOps, dan cloud infrastructure.
Buka → # Memahami Kompilasi GoBedah perjalanan kode Go dari source code menjadi binary native yang mandiri.
Buka → # Roadmap Belajar GoPetakan urutan belajar Go dari sintaks dasar hingga topik lanjutan.
Buka →Bab 2 Instalasi dan Lingkungan Kerja
Unduh dan pasang Go di Windows, macOS, dan Linux dengan cara resmi dari go.dev.
Buka → # Konfigurasi GOROOT dan GOPATHPahami peran variabel GOROOT, GOPATH, dan GOMODCACHE dalam instalasi Go.
Buka → # Memahami Go WorkspaceKenali struktur direktori kerja Go modern berbasis module dan lokasi cache build.
Buka → # Memilih Code EditorBandingkan VS Code, GoLand, dan editor lain untuk pengembangan Go.
Buka → # Instalasi goplsPasang language server resmi gopls agar editor mendapat autocomplete dan diagnosis kode.
Buka → # Menjalankan Go dari TerminalGunakan perintah go version, go run, dan go env dari terminal.
Buka → # Memahami Versi GoBaca skema versi Go, kebijakan dukungan dua rilis terakhir, dan fitur penting tiap rilis.
Buka → # Troubleshooting InstalasiAtasi masalah umum instalasi: command not found, PATH, dan versi ganda.
Buka →Bab 3 Program Pertama
Bedah anatomi program Go: package, import, fungsi, dan statement.
Buka → # Package mainPahami peran package main sebagai penanda program yang dapat dieksekusi.
Buka → # Fungsi mainKenali fungsi main sebagai titik masuk yang dijalankan runtime saat program dimulai.
Buka → # Import PackagePelajari cara mengimpor package standar dan pihak ketiga ke dalam program.
Buka → # fmt.PrintlnTampilkan output ke layar dengan fmt.Println, bedah perilakunya, dan kenali Print serta Printf.
Buka → # Menjalankan ProgramJalankan program dengan go run dan pahami proses di balik layar.
Buka → # Kompilasi ProgramBangun binary dengan go build dan hasilkan program yang bisa didistribusikan.
Buka → # Membaca Pesan ErrorLatih membaca pesan error compiler agar dapat memperbaiki kode dengan cepat.
Buka →Bab 4 Dasar Bahasa Go
Pelajari cara menyimpan nilai dengan var, aturan penamaannya, dan pembacaan ulang nilainya.
Buka → # Deklarasi PendekGunakan := untuk deklarasi variabel singkat di dalam fungsi.
Buka → # KonstantaBuat nilai tetap dengan const dan pahami perbedaan typed dan untyped constant.
Buka → # Zero ValueKenali nilai awal setiap tipe di Go: 0, false, string kosong, dan nil.
Buka → # Tipe Data BooleanGunakan nilai true dan false beserta operasi dasarnya.
Buka → # Tipe Data NumerikPilih tipe int, uint, float, dan complex dengan rentang yang tepat.
Buka → # String dan RunePahami string UTF-8, rune, dan cara mengiterasi karakter Unicode.
Buka → # Byte dan EncodingBedakan byte, string, dan representasi UTF-8 di memori.
Buka → # Inferensi TipeBiarkan compiler menentukan tipe dari nilai awal yang diberikan.
Buka → # Konversi TipeUbah nilai antar tipe numerik dan string secara eksplisit di Go.
Buka → # Deklarasi MultipleDeklarasikan banyak variabel sekaligus dan tukar nilainya dengan rapi.
Buka → # Penamaan IdentifierTerapkan konvensi penamaan Go: camelCase, exported, dan unexported.
Buka →Bab 5 Operator dan Ekspresi
Hitung dengan penjumlahan, pengurangan, perkalian, pembagian, dan sisabagi, termasuk pembagian integer.
Buka → # Operator PerbandinganBandingkan nilai dengan berbagai operator relasi, termasuk perbandingan string.
Buka → # Operator LogikaGabungkan kondisi dengan operator AND, OR, dan NOT beserta short-circuit evaluation.
Buka → # Operator BitwiseManipulasi bit dengan operator AND, OR, XOR, dan shift untuk kasus low-level.
Buka → # Assignment OperatorPermudah penugasan dengan operator gabungan seperti += dan -=.
Buka → # Increment dan DecrementNaikkan dan turunkan nilai dengan ++ dan -- yang berlaku sebagai statement.
Buka → # Operator PointerKenali operator alamat dan dereference untuk bekerja dengan memori.
Buka → # Prioritas OperatorPahami urutan evaluasi ekspresi dan gunakan tanda kurung untuk kejelasan.
Buka →Bab 6 Kendali Alur
Ambil keputusan dengan if, else if, dan else tanpa tanda kurung kondisi.
Buka → # if dengan InitializerJalankan statement singkat sebelum kondisi if dievaluasi.
Buka → # switchGanti rantai if dengan switch, termasuk switch tanpa kondisi dan fallthrough.
Buka → # Type SwitchPeriksa tipe dinamis interface dengan type switch.
Buka → # Perulangan forKuasai satu-satunya keyword perulangan di Go dengan tiga bentuknya.
Buka → # Perulangan rangeIterasi slice, array, map, string, dan channel dengan for range.
Buka → # break dan continueHentikan dan lewati iterasi perulangan dengan break dan continue.
Buka → # Label dan gotoKeluar dari perulangan bersarang dengan label dan gunakan goto secara hemat.
Buka → # deferJadwalkan pemanggilan fungsi agar berjalan saat fungsi pemanggil selesai.
Buka →Bab 7 Fungsi
Buat fungsi dengan keyword func, tentukan parameter, dan tipe kembalian.
Buka → # Parameter dan ArgumenPahami passing by value, parameter bertipe pointer, dan slice sebagai parameter.
Buka → # Multiple Return ValuesKembalikan banyak nilai sekaligus, pola standar Go untuk hasil dan error.
Buka → # Named Return ValuesBeri nama nilai kembalian dan gunakan naked return secara terbatas.
Buka → # Variadic FunctionTerima jumlah argumen fleksibel dengan parameter variadic.
Buka → # First-Class FunctionSimpan fungsi dalam variabel, kirim sebagai argumen, dan kembalikan dari fungsi lain.
Buka → # Anonymous FunctionBuat fungsi tanpa nama untuk tugas singkat dan immediate invocation.
Buka → # ClosureTangkap variabel lingkungan sekitar dalam fungsi yang dikembalikan.
Buka → # RecursionSelesaikan masalah berulang dengan fungsi yang memanggil dirinya sendiri.
Buka → # Function Value dan nilKenali fungsi bernilai nil dan bahaya memanggilnya tanpa pemeriksaan.
Buka →Bab 8 Array, Slice, dan Map
Kenali array dengan panjang tetap dan alasan array jarang dipakai langsung.
Buka → # SliceBuat dan gunakan slice, struktur data yang paling sering dipakai di Go.
Buka → # Slice: Length dan CapacityBedakan len dan cap beserta pola pertumbuhan kapasitas slice.
Buka → # append dan copyTambah elemen dan salin isi slice dengan built-in append dan copy.
Buka → # Backing ArrayPahami hubungan slice dengan array di belakangnya dan risiko aliasing.
Buka → # Multidimensional SliceSusun data tabel dan matriks dengan slice bersarang.
Buka → # MapSimpan pasangan key-value dengan map dan tipe key yang sah.
Buka → # Operasi MapTambah, ubah, hapus, dan periksa keberadaan key dengan comma-ok idiom.
Buka → # nil Slice dan nil MapPahami perilaku slice dan map bernilai nil agar terhindar dari panic.
Buka → # Memilih Array, Slice, atau MapBandingkan ketiga struktur dan pilih yang paling tepat per masalah.
Buka →Bab 9 String dan Text Processing
Pahami mengapa string Go tidak dapat diubah dan cara membangun string baru.
Buka → # UTF-8 dan UnicodeBedah string UTF-8, rune, dan iterasi karakter multibahasa.
Buka → # Package stringsGunakan package strings untuk mencari, memotong, menggabung, dan memformat teks.
Buka → # Package strconvKonversi angka dan string bolak-balik dengan package strconv.
Buka → # Package bytesOlah potongan byte dengan API yang serupa package strings.
Buka → # strings.BuilderBangun string besar secara efisien tanpa alokasi berulang.
Buka → # Parsing TextPecah teks terformat dengan strings.Fields, strings.Split, dan bufio.Scanner.
Buka → # Regular ExpressionCocokkan pola teks dengan regexp dan kenali batas penggunaannya.
Buka →Bab 10 Pointer dan Memory
Kenali alamat memori, dereference, dan jaminan keselamatan pointer Go.
Buka → # Pointer dan ValuePilih antara bekerja dengan salinan nilai atau referensi ke memori.
Buka → # Pointer sebagai ParameterUbah nilai milik pemanggil dengan mengirim alamat variabel ke fungsi.
Buka → # Pointer ReceiverTerapkan pointer pada receiver method agar method dapat memodifikasi struct.
Buka → # Pointer ke PointerKenali pointer bertingkat dan kasus nyata penggunaannya yang terbatas.
Buka → # Escape AnalysisLihat cara compiler memutuskan sebuah nilai tinggal di stack atau heap.
Buka → # Stack dan HeapPahami dua area memori utama dan konsekuensinya bagi performa.
Buka → # Garbage CollectionKenali cara runtime Go membebaskan memori secara otomatis.
Buka → # Menghindari Memory LeakDeteksi dan cegah kebocoran memori akibat referensi yang tersembunyi.
Buka →Bab 11 Struct dan Method
Rangkai data berbagai tipe dalam satu struct bernama.
Buka → # Field dan Zero ValuePahami nilai awal field struct, perbandingan struct, dan struct kosong.
Buka → # Struct LiteralBuat nilai struct dengan bentuk keyed dan positional literal.
Buka → # Embedded StructSematkan struct di dalam struct untuk komposisi dan penggunaan ulang perilaku.
Buka → # MethodLengkapi tipe dengan method melalui receiver yang dideklarasikan pada fungsi.
Buka → # Value Receiver dan Pointer ReceiverPilih receiver yang tepat dan pahami konsekuensi semantik salin vs ubah.
Buka → # Method SetPelajari aturan method set untuk nilai dan pointer beserta implikasinya pada interface.
Buka → # Constructor PatternBuat constructor NewX yang idiomatik lengkap dengan validasi awal.
Buka → # Composition over InheritanceRancang tipe dengan komposisi alih-alih pewarisan berjenjang.
Buka →Bab 12 Interface
Kenali interface sebagai kontrak perilaku tanpa implementasi.
Buka → # Implementasi Interface ImplisitImplementasikan interface tanpa deklarasi eksplisit pada tipe.
Buka → # Empty InterfacePahami interface kosong yang dapat menampung nilai apa pun.
Buka → # Tipe anyGunakan alias any dan kenali batas penggunaannya.
Buka → # Type AssertionAmbil nilai konkret dari interface dengan aman, termasuk bentuk comma-ok.
Buka → # Type Switch pada InterfaceBercabang berdasarkan tipe dinamis dengan type switch.
Buka → # Interface nilPahami interface bernilai nil dan jebakan nil interface berisi tipe.
Buka → # Komposisi InterfaceGabungkan interface kecil menjadi interface baru.
Buka → # Kecilnya InterfaceRancang interface kecil dengan satu atau sedikit method.
Buka → # Dependency InversionBalik arah dependensi dengan interface agar modul mudah diuji.
Buka →Bab 13 Error Handling
Pahami error sebagai interface dengan satu method Error() string.
Buka → # Membuat ErrorBuat error dengan errors.New dan fmt.Errorf sesuai konteksnya.
Buka → # Sentinel ErrorDefinisikan error acuan dan bandingkan keberadaannya dengan errors.Is.
Buka → # Custom Error TypeBuat tipe error sendiri yang membawa konteks tambahan.
Buka → # Error WrappingBungkus error dengan verb %w agar rantai penyebab tetap utuh.
Buka → # errors.Is dan errors.AsPeriksa rantai error dengan errors.Is dan ambil detailnya dengan errors.As.
Buka → # panic dan recoverGunakan panic untuk kondisi tak terpulihkan dan recover sebagai jaring pengaman.
Buka → # Error BoundaryBatasi penyebaran error pada batas antar lapisan aplikasi.
Buka → # Strategi Error HandlingPilih strategi: kembalikan, bungkus, retry, atau gagal cepat.
Buka →Bab 14 Package dan Module
Bedah package, path import, dan hubungan direktori dengan package.
Buka → # go.mod dan ModuleInisialisasi module dengan go mod init dan pahami isi berkas go.mod.
Buka → # Struktur ModuleRancang layout direktori module: cmd, internal, pkg, dan berkas utama.
Buka → # Export dan UnexportedKontrol visibilitas identifier lewat kapitalisasi huruf pertama.
Buka → # Package InitializationPahami urutan inisialisasi variabel, fungsi init, dan dependensi antar package.
Buka → # Package internalBatasi akses package dengan aturan direktori internal.
Buka → # Package AliasBeri alias pada import dan kelompokkan import secara rapi.
Buka → # go.workKerjakan beberapa module sekaligus dalam satu workspace.
Buka → # Versioning ModuleRilis module dengan semantic versioning dan tag git.
Buka → # Dependency ManagementKelola dependency dengan go get, go mod tidy, dan verifikasi go.sum.
Buka →Bab 15 Generics
Pahami masalah duplikasi kode yang diselesaikan generics.
Buka → # Type ParameterDeklarasikan type parameter pada fungsi dan tipe.
Buka → # Type ConstraintBatasi tipe yang sah dengan constraint berbentuk interface.
Buka → # Constraint comparableGunakan constraint comparable untuk tipe yang dapat dibandingkan.
Buka → # Type SetsPahami himpunan tipe yang didefinisikan constraint.
Buka → # Generic FunctionTulis fungsi generik yang bekerja untuk banyak tipe dengan type safety.
Buka → # Generic TypeBuat struct dan container generik sendiri.
Buka → # Limitasi Method pada Generic TypeKenali aturan method dengan type parameter sendiri beserta batasannya pada interface.
Buka → # Kapan Menggunakan GenericsPilih antara generics, interface, dan kode konkret secara sadar.
Buka →Bab 16 Concurrency
Bedakan concurrency dan parallelism serta peran GOMAXPROCS.
Buka → # GoroutineJalankan fungsi secara ringan dengan goroutine dan sinkronkan selesai kerjanya.
Buka → # ChannelKirim dan terima data antar goroutine dengan channel tanpa shared memory.
Buka → # Buffered dan Unbuffered ChannelPilih channel buffered atau unbuffered sesuai kebutuhan sinkronisasi.
Buka → # Channel DirectionBatasi channel menjadi kirim-saja atau terima-saja pada parameter.
Buka → # selectTunggu beberapa operasi channel sekaligus dengan select.
Buka → # sync.WaitGroupSinkronkan penyelesaian sekelompok goroutine dengan WaitGroup.
Buka → # sync.Mutex dan sync.RWMutexLindungi shared state dengan mutex dan read-write mutex.
Buka → # sync.OncePastikan inisialisasi hanya berjalan tepat satu kali.
Buka → # Atomic OperationOperasi counter sederhana dengan sync/atomic tanpa mutex.
Buka → # contextBawa deadline, sinyal pembatalan, dan nilai lintas batas API.
Buka → # Cancellation dan TimeoutBatalkan operasi panjang dan pasang batas waktu eksekusi.
Buka → # Worker PoolBatasi jumlah goroutine pekerja dengan pola worker pool.
Buka → # PipelineRangkai tahapan pemrosesan dengan channel yang berurutan.
Buka → # Race ConditionKenali data race, semantik loop variable, dan deteksi dengan go test -race.
Buka → # Mencegah Goroutine LeakHentikan goroutine yang menggantung dengan context dan channel tutup.
Buka →Bab 17 Standard Library
Format dan cetak data dengan fmt: Println, Printf, Sprint, hingga Scanner.
Buka → # Package osAkses command line argument, environment variable, dan exit program dengan os.
Buka → # Package io dan UtilitasnyaPahami io.Reader, io.Writer, dan utilitas pendukungnya.
Buka → # Package bufioPercepat baca-tulis dengan buffered Reader, Writer, dan Scanner.
Buka → # Package filepath dan pathBangun path lintas sistem operasi dengan filepath dan path.
Buka → # Package timeBekerja dengan waktu, durasi, timer, dan ticker secara benar.
Buka → # Package math dan math/randHitung matematis dan bangkitkan bilangan acak dengan math/rand.
Buka → # Package sort dan slicesUrutkan slice dengan package sort, slices, dan comparator sendiri.
Buka → # Package mapsGunakan utilitas package maps untuk bekerja pada map generik.
Buka → # Package log dan log/slogCatat kejadian dengan log klasik dan slog terstruktur.
Buka → # Package flagBaca command line flag dengan package flag bawaan.
Buka → # Package embedSematkan berkas statis ke dalam binary dengan embed.
Buka →Bab 18 File dan I/O
Baca berkas dengan os.ReadFile, os.Open, dan io.ReadAll.
Buka → # Menulis FileTulis berkas dengan os.WriteFile, os.Create, dan bufio.Writer.
Buka → # Buffered I/OKurangi jumlah syscall dengan bufio.Reader dan bufio.Writer.
Buka → # Directory dan FilesystemJelajah direktori dan baca metadata berkas dengan os.ReadDir dan Stat.
Buka → # File PermissionsAtur permission berkas dan mode bit dengan aman.
Buka → # Temporary FileBuat berkas dan direktori sementara dengan os.CreateTemp dan MkdirTemp.
Buka → # Streaming DataProses data yang mengalir dengan io.Reader dan io.Writer tanpa memuat semua.
Buka → # Menangani File BesarBaca berkas besar per baris dan per potongan dengan hemat memori.
Buka →Bab 19 Encoding dan Serialization
Ubah struct, slice, dan map menjadi JSON serta decode JSON kembali ke tipe Go.
Buka → # Encoding XMLBaca dan tulis XML dengan encoding/xml dan struct tag XML.
Buka → # Encoding CSVProses data tabular CSV dengan encoding/csv.
Buka → # Encoding gobSerialisasi nilai Go secara native untuk pertukaran data biner.
Buka → # Custom MarshalerKendalikan bentuk output dengan MarshalJSON dan UnmarshalJSON.
Buka → # Struct TagAtur nama field JSON, omitempty, dan tag untuk banyak format sekaligus.
Buka → # Validasi DataValidasi hasil decode JSON sebelum data dipakai lebih lanjut.
Buka → # Format dan CompatibilityJaga kompatibilitas format data ketika aplikasi berkembang.
Buka →Bab 20 Testing
Tulis test pertama dengan testing.T, t.Errorf, dan perintah go test.
Buka → # Table-Driven TestUji banyak kasus sekaligus dengan pola tabel yang idiomatik di Go.
Buka → # SubtestPecah test menjadi subtest bernama dengan t.Run untuk diagnosis yang presisi.
Buka → # Test HelperBuat test helper dengan t.Helper, kegagalan eksplisit, dan t.Cleanup.
Buka → # Test FixtureSiapkan data uji dan direktori sementara dengan t.TempDir.
Buka → # httptestUji handler HTTP tanpa server nyata dengan httptest.NewRecorder.
Buka → # BenchmarkUkur performa fungsi dengan testing.B dan go test -bench.
Buka → # Fuzz TestingTemukan input bermasalah dengan fuzzing bawaan go test -fuzz.
Buka → # Example TestDokumentasikan fungsi dengan contoh output yang diverifikasi otomatis.
Buka → # CoverageUkur cakupan test dengan go test -cover dan baca hasil coverprofile.
Buka → # Race DetectorTangkap data race sejak fase test dengan go test -race.
Buka → # Menguji Package dengan DependencyRancang dependency sebagai interface kecil agar mudah diganti fake saat test.
Buka →Bab 21 Debugging dan Profiling
Terjemahkan pesan error compiler menjadi langkah perbaikan yang konkret.
Buka → # Debugger DelvePasang Delve dan telusuri program dengan breakpoint dan print variable.
Buka → # Logging untuk DebuggingManfaatkan log terstruktur untuk melacak jalur eksekusi program.
Buka → # pprofKenali pprof, profil CPU, heap, dan goroutine untuk analisis performa.
Buka → # CPU ProfilingTemukan fungsi yang paling memakan waktu CPU dengan CPU profile.
Buka → # Memory ProfilingAnalisis alokasi memori dengan heap profile dan allocs profile.
Buka → # Execution TracerLihat penjadwalan goroutine dan peristiwa blocking dengan go tool trace.
Buka → # Menggunakan Race DetectorDiagnosis data race dengan race detector pada test dan program.
Buka → # Diagnostik di ProductionEkspor profil dan metrik dari aplikasi yang sedang berjalan.
Buka →Bab 22 HTTP dan Networking
Pahami request, response, method, header, dan status code sebagai fondasi.
Buka → # net/http ClientKirim request HTTP dengan http.Client dan tangani response dengan benar.
Buka → # net/http ServerBangun server dengan http.ServeMux dan http.Server.
Buka → # RoutingRancang routing method dan path dengan ServeMux sejak Go 1.22.
Buka → # Request dan ResponseBaca body, header, dan query parameter dengan rapi.
Buka → # MiddlewareBungkus handler dengan middleware yang berantai dan berurutan.
Buka → # Timeout dan ConnectionBatasi waktu dan kelola koneksi agar aplikasi tidak menggantung.
Buka → # Context pada HTTPBawa context request melintasi handler hingga operasi lambat.
Buka → # Graceful ShutdownMatikan server dengan aman setelah menerima sinyal berhenti.
Buka → # TLS dan HTTPSAktifkan HTTPS dan konfigurasi TLS modern pada server Go.
Buka → # File ServerSajikan berkas statis dengan http.FileServer dan embed.
Buka →Bab 23 REST API
Rancang resource, method, dan URL yang konsisten serta mudah dipahami.
Buka → # Routing dan HandlerSusun handler yang tipis di atas routing net/http.
Buka → # Request ValidationValidasi payload JSON sebelum data diproses lebih jauh.
Buka → # Response FormatBentuk respons JSON yang konsisten dan mudah dikonsumsi client.
Buka → # Status CodePilih status code yang tepat untuk tiap skenario keberhasilan dan kegagalan.
Buka → # Pagination, Filtering, dan SortingKembalikan data besar dengan pagination, filter, dan pengurutan.
Buka → # AuthenticationAutentikasi API dengan token dan header Authorization.
Buka → # AuthorizationBatasi akses endpoint berdasarkan peran pengguna.
Buka → # Rate LimitingBatasi laju request untuk melindungi API dari penyalahgunaan.
Buka → # API VersioningKelola perubahan API dengan versioning di URL atau header.
Buka → # OpenAPIDokumentasikan API dengan spesifikasi OpenAPI.
Buka → # Desain Error APIRancang struktur error yang informatif, konsisten, dan stabil.
Buka →Bab 24 Database dan SQL
Kenali database relasional, tabel, dan bahasa SQL sebagai fondasi.
Buka → # Package database/sqlPahami antarmuka standar Go untuk database SQL dan perannya.
Buka → # database/sql dan sqlxBandingkan antarmuka murni database/sql dengan bantuan sqlx.
Buka → # Koneksi DatabaseBuka koneksi dengan sql.Open dan driver PostgreSQL pgx.
Buka → # Connection PoolAtur MaxOpenConns, MaxIdleConns, dan lifetime koneksi.
Buka → # Query dan ParameterJalankan query dengan parameter binding agar aman dari injection.
Buka → # TransactionJalankan transaksi ACID dengan Begin, Commit, dan Rollback.
Buka → # MigrationKelola perubahan skema database dengan berkas migration.
Buka → # Repository PatternIsolasi akses data di balik tipe repository yang dapat diuji.
Buka → # Context dan Query TimeoutBatalkan query berat dengan context dan timeout.
Buka → # Testing DatabaseUji lapisan data dengan database uji dan pembersihan data.
Buka → # Manajemen Koneksi DatabaseKelola siklus hidup koneksi pada aplikasi berumur panjang.
Buka →Bab 25 Template Engine
Render HTML dengan html/template yang otomatis di-escape.
Buka → # text/templateBuat teks terformat dengan text/template untuk laporan dan email.
Buka → # Template CompositionSusun layout, block, dan partial agar template dapat digunakan ulang.
Buka → # Custom Template FunctionDaftarkan fungsi sendiri ke dalam template.
Buka → # Escaping dan Keamanan TemplatePahami mekanisme auto-escaping dan konteks keamanannya.
Buka → # Server-Side RenderingRender halaman lengkap di sisi server dan kirim HTML jadi.
Buka →Bab 26 Authentication dan Security
Simpan password dengan hashing bcrypt dan salt, bukan plaintext.
Buka → # Session ManagementKelola sesi login dengan session ID dan penyimpanan sisi server.
Buka → # Cookie SecurityAtur attribute cookie HttpOnly, Secure, dan SameSite.
Buka → # Token-Based AuthenticationAutentikasi stateless dengan token yang ditandatangani.
Buka → # OAuth2 dan OIDCPahami alur otorisasi pihak ketiga dan login terpusat.
Buka → # CSRFCegah cross-site request forgery dengan token dan SameSite.
Buka → # CORSAtur akses resource lintas origin dengan header yang benar.
Buka → # SQL InjectionCegah SQL injection dengan parameter binding dan input validation.
Buka → # Secure ConfigurationSimpan secret dan konfigurasi dengan aman, jauh dari kode.
Buka → # Dependency SecurityAudit celah keamanan dependency dengan govulncheck.
Buka → # Secure LoggingCatat aktivitas tanpa membocorkan data sensitif.
Buka →Bab 27 Arsitektur Aplikasi
Pisahkan handler, service, dan akses data agar tiap lapisan mudah diuji.
Buka → # Layered ArchitectureSusun aplikasi berlapis: handler, use case, dan repository.
Buka → # Clean ArchitecturePahami dependency rule dan inti domain pada Clean Architecture.
Buka → # Dependency InjectionSuntikkan dependency lewat constructor tanpa framework.
Buka → # Configuration ManagementMuat konfigurasi dari environment dan file dengan validasi.
Buka → # Domain ModelingModelkan entitas bisnis dan jaga aturan bisnisnya tetap di domain.
Buka → # Modular MonolithBangun aplikasi besar dari module yang modular dan terpisah jelas.
Buka → # Event-Driven DesignKomunikasikan komponen melalui event agar longgar kaitannya.
Buka → # Memilih ArsitekturEvaluasi kebutuhan nyata dan pilih arsitektur secara proporsional.
Buka →Bab 28 Design Patterns
Konfigurasi fleksibel dengan opsi berupa fungsi.
Buka → # Factory PatternBuat objek lewat fungsi pabrik tanpa hierarki class yang rumit.
Buka → # Adapter PatternJembatani antarmuka yang tidak kompatibel dengan adapter.
Buka → # Strategy PatternGanti algoritma saat runtime dengan fungsi atau interface.
Buka → # Decorator PatternTambah perilaku dengan membungkus implementasi yang ada.
Buka → # Middleware PatternRangkai pemrosesan request dengan pola middleware bertingkat.
Buka → # Repository PatternAbstraksi penyimpanan data di balik interface repository.
Buka → # Dependency Injection PatternRakit komponen dengan DI manual dan perbandingan tool wire.
Buka →Bab 29 Command Line Application
Bedakan argument posisi dan flag, serta konvensinya pada alat CLI.
Buka → # Package flagBaca flag dan argument dengan package flag bawaan.
Buka → # Cobra dan CLI FrameworkBangun CLI besar dengan framework Cobra.
Buka → # SubcommandSusun perintah turunan seperti pola git commit.
Buka → # Configuration FileBaca konfigurasi dari berkas JSON dan YAML.
Buka → # Terminal OutputFormat output CLI dengan tabel, prefix status, dan warna.
Buka → # Exit CodeSampaikan hasil proses ke pemanggil melalui exit code yang bermakna.
Buka → # Distribusi CLIDistribusikan binary lintas platform dan simpan di GOBIN.
Buka →Bab 30 Logging dan Observability
Catat event sebagai data terstruktur agar mudah dicari dan dianalisis.
Buka → # log/slogGunakan log/slog dari standard library dengan handler teks dan JSON.
Buka → # Log LevelAtur verbositas Debug, Info, Warn, dan Error dengan benar.
Buka → # Request IDTautkan log dari banyak komponen untuk satu request yang sama.
Buka → # MetricsUkur counter, gauge, dan histogram untuk perilaku sistem.
Buka → # PrometheusEkspos metrik aplikasi dalam format yang dipahami Prometheus.
Buka → # Distributed TracingTelusuri satu request yang melintasi banyak layanan.
Buka → # OpenTelemetryInstrumentasi aplikasi dengan SDK OpenTelemetry.
Buka → # Health, Readiness, dan LivenessPisahkan probe hidup dan siap melayani traffic.
Buka →Bab 31 Performance dan Optimisasi
Ukur dengan benchmark dan profil sebelum mengubah kode.
Buka → # Mengurangi AllocationTurunkan tekanan garbage collector dengan mengurangi alokasi.
Buka → # Efisiensi Slice dan MapPrealokasi kapasitas dan pilih pola akses yang cepat.
Buka → # String BuildingGabung string dengan strings.Builder alih-alih operator +.
Buka → # Concurrency PerformanceSkalakan kerja dengan worker dan hindari goroutine berlebihan.
Buka → # Garbage Collection TuningAtur GOGC dan GOMEMLIMIT sesuai profil aplikasi.
Buka → # Compiler OptimizationPahami inlining, bounds check, dan devirtualization.
Buka → # Mengukur Sebelum OptimisasiHindari optimisasi dini dengan budaya ukur: profil dulu, ubah kode kemudian, buktikan dengan angka.
Buka →Bab 32 Deployment dan Operasional
Bangun binary siap production dengan go build dan kelola nama outputnya.
Buka → # Build FlagsKendalikan build dengan -ldflags, -trimpath, dan build tags.
Buka → # Cross CompilationBangun binary untuk sistem operasi dan arsitektur lain.
Buka → # Linux Service (systemd)Jalankan aplikasi sebagai service systemd yang otomatis restart.
Buka → # Environment ProductionSiapkan environment variable, user khusus, dan batas sumber daya.
Buka → # ContainerizationKemas aplikasi ke container image yang kecil dan dapat direproduksi.
Buka → # Docker Multi-Stage BuildBangun image kecil dengan Dockerfile multi-stage.
Buka → # Graceful Shutdown di ProductionHentikan service tanpa memutus request yang sedang berjalan.
Buka → # Release dan VersioningRilis versi terstruktur, changelog, dan artefak terdokumentasi.
Buka → # Rollback dan RecoveryKembali ke versi stabil dengan cepat dan terlatih.
Buka →Bab 33 Tooling dan Workflow
Format kode dengan gaya standar gofmt agar seluruh tim seragam.
Buka → # goimportsAtur dan kelompokkan import secara otomatis dengan goimports.
Buka → # go vetDeteksi pola kode mencurigakan dengan go vet.
Buka → # staticcheckLinting mendetail dengan staticcheck dan aturan utamanya.
Buka → # golangci-lintAgregasikan banyak linter dalam satu perintah golangci-lint.
Buka → # go docBaca dan tulis dokumentasi package dengan konvensi godoc.
Buka → # go generateBangkitkan kode dari directive go:generate.
Buka → # Makefile dan Task RunnerOtomasi tugas berulang dengan Makefile.
Buka → # Continuous IntegrationJalankan test dan lint otomatis pada setiap perubahan.
Buka →Bab 34 Proyek
Bangun kalkulator CLI dari nol: desain operasi, validasi input, dan pengujian.
Lihat proyek → # Proyek: Pengelola Tugas CLIBangun aplikasi manajemen tugas CLI dengan penyimpanan JSON dan pengujian penuh.
Lihat proyek → # Proyek: Web ServerBangun web server dengan routing, middleware, template, dan berkas statis.
Lihat proyek → # Proyek: REST API dengan PostgreSQLBangun REST API lengkap dengan PostgreSQL, migration, dan integration test.
Lihat proyek → # Proyek: Concurrent Worker PoolBangun worker pool dengan goroutine, channel, context, dan pengujian concurrency.
Lihat proyek → # Proyek: URL ShortenerBangun layanan pemendek URL dengan short code unik, PostgreSQL, dan redirect.
Lihat proyek →Bab 35 Referensi
Daftar lengkap keyword Go beserta fungsi dan contoh singkatnya.
Buka → # Tipe DataRujukan tipe data bawaan Go, zero value-nya, dan penggunaannya.
Buka → # OperatorRujukan operator Go lengkap dengan prioritas evaluasinya.
Buka → # Built-in FunctionDaftar fungsi bawaan Go dan kegunaannya.
Buka → # Standard LibraryPeta package standard library yang paling sering dipakai.
Buka → # Perintah goRujukan perintah go beserta opsi utamanya.
Buka → # Directive go.modArti directive go, require, replace, exclude, retract, dan tool.
Buka → # Environment VariableVariabel lingkungan Go: GOROOT, GOPATH, GOPROXY, GOSUMDB, dan lainnya.
Buka → # Compiler ErrorKamus pesan error compiler yang umum beserta solusinya.
Buka → # GlossaryIstilah penting ekosistem Go beserta penjelasan ringkasnya.
Buka →Bab 36 Lampiran
Ikuti gaya kode komunitas Go: penamaan, komentar, dan format.
Buka → # Membaca Dokumentasi ResmiArahkan diri di go.dev, pkg.go.dev, dan Effective Go.
Buka → # Panduan DebuggingLangkah sistematis saat program berperilaku salah.
Buka → # Troubleshooting ModuleAtasi masalah module dan dependency yang umum terjadi.
Buka → # Checklist Code ReviewDaftar periksa saat mereview kode Go.
Buka → # Checklist ProductionDaftar periksa kesiapan sebelum rilis ke production.
Buka → # Sumber Belajar ResmiKumpulan sumber belajar Go resmi dan tepercaya.
Buka →