Kerangka Materi
1. Pengenalan Go
- Apa itu Go (Golang)?
- Sejarah dan filosofi desain Go
- Go sebagai bahasa pemrograman web dan sistem
- Karakteristik utama:
- Pemetaan statis (Static typing)
- Kesederhanaan dan keterbacaan
- Kompilasi cepat
- Konkurensi bawaan (Built-in concurrency)
- Pengumpulan sampah (Garbage collection)
- Kompilasi lintas platform
- Kasus penggunaan umum untuk Go
- Kelebihan dan keterbatasan Go
- Perbandingan Go dengan C/C++, JavaScript, Ruby, Python, dan Java
- Memahami ekosistem Go
- Tinjauan pustaka standar Go
- Modul Go dan manajemen dependensi
- Anatomi aplikasi Go
- Praktik langsung: Memeriksa dan menjalankan program Go sederhana
2. Menyiapkan Lingkungan Pengembangan Go
- Memasang Go
- Memahami rantai alat (toolchain) Go
- Menkonfigurasi variabel lingkungan
- Memilih IDE atau editor kode
- Mempergunakan baris perintah dengan Go
- Membuat ruang kerja Go
- Memahami struktur proyek Go
- Inisialisasi proyek dengan Go Modules
- Mempergunakan
go mod init - Menyusun dependensi dengan
go get - Memperbarui dan memeriksa dependensi
- Memformat kode sumber dengan
gofmt - Menjalankan program dengan
go run - Membangun aplikasi dengan
go build - Memasang aplikasi Go
- Mengkompilasi aplikasi lintas platform
- Praktik langsung: Membuat dan mengonfigurasi proyek Go di dalam kontainer
3. Variabel, Konstanta, dan Tipe Data di Go
- Menyatakan variabel
- Tipe eksplisit vs tipe inferensi
- Penyusunan variabel singkat
- Konstanta
- Nilai nol (Zero values)
- Cakupan (scope) dan masa hidup variabel
- Tipe data primitif:
- Bilangan bulat (Integers)
- Bilangan desimal (Floating-point numbers)
- Bilangan kompleks
- Bolean
- String
- Konversi tipe data
- Bekerja dengan Unicode dan UTF-8
- Runes dan bytes
- Penugasan variabel multi (Multiple variable assignment)
- Memahami keamanan tipe (type safety)
- Latihan: Membangun program pemrosesan data baris perintah kecil
4. Operator dan Ekspresi
- Operator aritmatika
- Operator perbandingan
- Operator logika
- Operator penugasan
- Inkremen dan dekremen
- Precedensi operator
- Bekerja dengan perhitungan bilangan bulat dan desimal
- Menghindari kesalahan konversi tipe umum
- Latihan: Menerapkan logika perhitungan dan validasi
5. Tanggal, Waktu, dan Format
- Mempergunakan pustaka
time - Membuat dan memanipulasi tanggal
- Mendapatkan waktu saat ini
- Zona waktu dan lokasi
- Parsing tanggal dan waktu
- Memformat tanggal dan waktu
- Perhitungan durasi
- Bekerja dengan Unix timestamp
- Menangani batas waktu (timeouts)
- Latihan: Menambahkan timestamp dan perhitungan durasi ke aplikasi
6. Array, Slice, Map, dan Struct
Array
- Menyatakan array
- Inisialisasi array
- Iterasi pada array
- Array multidimensi
Slice
- Memahami slice vs array
- Membuat slice
- Menambahkan elemen (Appending elements)
- Menyalin slice
- Panjang dan kapasitas slice
- Melakukan slicing pada slice
- Jebakan umum pada slice
Map
- Membuat map
- Menambahkan dan menghapus entri
- Memeriksa keberadaan kunci
- Iterasi pada map
- Map yang berisi data kompleks
Struct
-
Menyusun struktur
-
Field struct
-
Inisialisasi struct
-
Struct bersarang (Nested structs)
-
Struct anonim
-
Metode struct
-
Tag struct JSON
-
Praktik langsung: Memodelkan pengguna, produk, dan data aplikasi menggunakan struct, slice, dan map
7. Logika Kondisional dan Loop
- Pernyataan
if elsedanelse if- Penyusunan variabel di dalam kondisi
- Loop
for - Loop tak terbatas (Infinite loops)
- Kondisi loop
breakdancontinue- Iterasi dengan
range - Loop bersarang (Nested loops)
- Pernyataan
switch - Switch berbasis ekspresi
- Beberapa kasus (Multiple cases)
- Kasus default
- Type switches
- Latihan: Menerapkan logika validasi dan pemrosesan aplikasi
8. Fungsi
- Menyusun fungsi
- Parameter fungsi
- Nilai pengembalian
- Nilai pengembalian multi (Multiple return values)
- Nilai pengembalian bernama (Named return values)
- Fungsi variadic
- Fungsi anonim
- Nilai fungsi
- Closures
- Rekursi
- Melewatkan fungsi sebagai argumen
- Fungsi yang mengembalikan error
- Menyusun fungsi kecil yang dapat digunakan ulang
- Latihan: Merancang ulang kode yang ada menjadi fungsi yang dapat digunakan ulang
9. Pointer dan Konsep Memori
- Apa itu pointer?
- Operator alamat dan dereference
- Pointer dan parameter fungsi
- Pointer receivers
- Pointer ke struct
- Nil pointers
- Kapan harus menggunakan pointer
- Semantik nilai vs referensi (Value versus reference semantics)
- Memahami manajemen memori Go dan pengumpulan sampah
- Kesalahan umum pada pointer
- Praktik langsung: Mengubah data aplikasi menggunakan pointer
10. Membuat Aplikasi Web dengan Go
- Tinjauan kemampuan web Go
- Pengenalan pustaka
net/http - Membuat server HTTP
- Permintaan dan respons HTTP
- Metode HTTP
- URL permintaan dan parameter query
- Header HTTP
- Kode status HTTP
- Dasar-dasar routing
- Membuat handler
- Menangani data formulir
- Menyediakan file statis
- Bekerja dengan template HTML
- Variabel template dan struktur kontrol
- Menyusun arsitektur aplikasi web
- Praktik langsung: Membangun server web Go dasar
11. Membangun Layanan Web RESTful
- Dasar-dasar arsitektur REST
- Merancang endpoint API
- GET, POST, PUT, PATCH, dan DELETE
- Bekerja dengan JSON
- Encoding dan decoding JSON
- Validasi permintaan
- Kode status HTTP
- Respons error
- Parameter query dan parameter path
- Struktur respons API
- Memisahkan handler dari logika bisnis
- Praktik langsung: Membangun API REST CRUD
12. Runtime Go, Kompilasi, dan Build Proyek
- Memahami compiler Go
- Proses build Go
go rungo buildgo installgo test- Build flags
- Konfigurasi yang spesifik lingkungan
- Membangun untuk sistem operasi dan arsitektur yang berbeda
- Memproduksi biner mandiri (standalone binaries)
- Menyusun konfigurasi aplikasi
- Latihan: Mengkompilasi aplikasi untuk beberapa platform
13. Bekerja dengan File dan Web
- Membuka dan menutup file
- Membaca file
- Menulis file
- Membuat direktori
- Metadata file
- I/O terbantu (Buffered I/O)
- Bekerja dengan stream
- Membaca dan menulis file JSON
- Klien HTTP
- Menjalankan permintaan HTTP keluar (outbound)
- Menangani error klien HTTP
- Batas waktu dan pembatalan
- Memproses respons API
- Praktik langsung: Mengambil data dari API eksternal dan menyimpannya secara lokal
14. Penanganan Error dan Debugging
- Pendekatan Go terhadap error
- Mengembalikan error dari fungsi
- Memeriksa error
- Membuat error khusus
- Membungkus error (Wrapping errors)
- Menambahkan konteks ke error
errors.Isdanerrors.As- Panic dan recovery
- Kapan menggunakan
panic - Mengdebug masalah umum Go
- Mencatat aktivitas aplikasi (Logging)
- Mempergunakan alat debug Go
- Latihan: Mendiagnosis dan memperbaiki error aplikasi yang sengaja dibuat
15. Interface dan Abstraksi
- Apa itu interface?
- Implementasi interface implisit
- Menyusun interface
- Nilai interface
- Interface kosong /
any - Type assertions
- Type switches
- Implementasi pointer vs nilai
- Merancang interface kecil
- Dependency inversion
- Mempergunakan interface untuk pengujian
- Menurunkan kebergantungan (coupling) aplikasi
- Praktik langsung: Memperkenalkan interface ke aplikasi web contoh
16. Pustaka (Packages) dan Organisasi Proyek
- Membuat package
- Konvensi penamaan package
- Identitas yang diekspor dan tidak diekspor (Exported and unexported identifiers)
- Mengimpor package
- Inisialisasi package
- Menyusun lapisan aplikasi
- Package internal
- Menyusun dependensi dengan Go Modules
- Semantic versioning
- Mempergunakan package pihak ketiga
- Menghindari dependensi melingkar (circular dependencies)
- Merancang proyek Go yang dapat dipelihara
- Latihan: Merancang ulang aplikasi menjadi package terpisah
17. Konkurensi dengan Goroutines
- Apa itu konkurensi?
- Goroutines
- Memulai goroutines
- Memahami eksekusi konkuren ringan
- Tantangan sinkronisasi
- State bersama (Shared state)
- Condition race
- Mempergunakan
sync.WaitGroup - Mutexes dan read/write mutexes
- Operasi atomik (Atomic operations)
- Praktik langsung: Mengubah tugas sekuensial menjadi pemrosesan konkuren
18. Channels
- Memahami channels
- Mengirim dan menerima nilai
- Channel berbantu (buffered) vs tidak berbantu (unbuffered)
- Perilaku blocking
- Menutup channels
- Ranging pada channels
- Channel berarah (Directional channels)
- Komunikasi berbasis channel
- Pernyataan Select
- Batas waktu dan pembatalan
- Pola worker-pool
- Pola producer/consumer
- Praktik langsung: Membangun sistem worker konkuren
19. Context dan Manajemen Permintaan
- Mengapa context penting dalam aplikasi web
context.Context- Context berskala permintaan (Request-scoped context)
- Pembatalan
- Deadlines
- Batas waktu (Timeouts)
- Mempropagasi context melalui lapisan aplikasi
- Membatalkan operasi database atau HTTP
- Menghindari penyalahgunaan context
- Latihan: Menambahkan pembatalan permintaan dan batas waktu ke aplikasi web
20. Pengujian Aplikasi Go
- Mengapa pengujian otomatis penting
- Menulis unit test
- Pustaka
testing - Fungsi uji (Test functions)
- Konvensi penamaan uji
- Uji berbasis tabel (Table-driven tests)
- Uji error
- Uji handler HTTP
- Server uji HTTP
- Test fixtures
- Cakupan uji (Test coverage)
- Benchmarks
- Uji contoh (Example tests)
- Uji interface dengan mocks atau fakes
- Praktik langsung: Membuat suite uji untuk aplikasi contoh
21. Optimasi Kinerja
- Memahami kinerja aplikasi Go
- Identifikasi titik kemacetan (bottlenecks)
- Kinerja CPU vs memori
- Struktur data efisien
- Menurunkan alokasi yang tidak perlu
- String, bytes, dan buffer
- Manajemen goroutines
- Menghindari konkurensi berlebihan
- Strategi caching
- Pertimbangan database dan jaringan
- Profiling aplikasi
- Benchmark dan pengujian kinerja
- Mempergunakan alat profiling Go
- Latihan: Memprofilkan dan mengoptimalkan aplikasi yang sengaja dibuat tidak efisien
22. Keamanan dan Praktik Aplikasi Web yang Tangguh
- Validasi masukan pengguna
- Penanganan permintaan HTTP yang aman
- Pencegahan kerentanan web umum
- Penanganan error yang aman
- Konsep autentikasi dan otorisasi
- Manajemen rahasia (secrets) dan konfigurasi
- Komunikasi HTTP yang aman
- Menghindari informasi sensitif di log
- Manajemen dependensi dan pembaruan
- Batas sumber daya dan batas waktu permintaan
- Latihan: Meninjau dan memperkuat (harden) API contoh
23. Logging dan Observabilitas Aplikasi
- Dasar-dasar logging
- Logging terstruktur (Structured logging)
- Level log
- Logging permintaan
- Logging error
- Korelasi dan ID permintaan
- Memantau perilaku aplikasi
- Metriks dasar
- Endpoint pemeriksaan kesehatan (Health-check endpoints)
- Diagnosis masalah produksi
- Praktik langsung: Menambahkan logging terstruktur dan pemeriksaan kesehatan
24. Kontainerisasi Aplikasi Go
- Mengapa menggunakan kontainer?
- Aplikasi Go dan kontainerisasi
- Menulis Dockerfile
- Build multi-tahap (Multi-stage builds)
- Membangun image runtime minimal
- Manajemen konfigurasi melalui variabel lingkungan
- Jaringan kontainer
- Mengekspos port aplikasi
- Menjalankan aplikasi di dalam kontainer
- Uji aplikasi terkontainer
- Praktik langsung: Mengemas aplikasi Go contoh sebagai kontainer siap produksi
25. Peluncuran (Deployment)
- Menyiapkan aplikasi untuk produksi
- Membangun biner produksi
- Konfigurasi lingkungan
- Peluncuran berbasis kontainer
- Arsitektur peluncuran
- Reverse proxies
- Pertimbangan HTTPS/TLS
- Pemeriksaan kesehatan aplikasi
- Penutupan yang anggun (Graceful shutdown)
- Penanganan sinyal sistem operasi
- Skala aplikasi web Go
- Pemilahan horizontal vs vertikal
- Pemecahan masalah dasar peluncuran
- Praktik langsung: Meluncurkan aplikasi web contoh
26. Capstone: Aplikasi Web Go Lengkap
Peserta menyatukan konsep-konsep tersebut dengan mengembangkan aplikasi lengkap.
Proyek ini dapat mencakup:
- Inisialisasi proyek dengan Go Modules
- Organisasi package
- Routing HTTP
- Endpoint API REST
- Penanganan permintaan dan respons JSON
- Validasi masukan
- Penanganan error
- Interface
- Pemrosesan konkuren
- Komunikasi API eksternal
- Persistensi file atau database
- Pengujian otomatis
- Logging
- Pertimbangan kinerja
- Kontainerisasi
- Konfigurasi produksi
- Peluncuran
27. Ulasan dan Praktik Terbaik
- Ulasan sintaksis inti Go
- Konvensi penulisan kode Go
- Menulis Go yang idiomatik (idiomatic Go)
- Menjaga kode tetap sederhana
- Desain package yang efektif
- Praktik terbaik penanganan error
- Prinsip desain interface
- Praktik terbaik konkurensi
- Strategi pengujian
- Pertimbangan kinerja
- Kepemeliharaan dan keterbacaan
- Kesalahan umum yang dilakukan pengembang Go pemula
- Pendekatan yang direkomendasikan untuk melanjutkan pengembangan Go
28. Kesimpulan
- Ulasan konsep-konsep utama
- Ulasan aplikasi web yang selesai
- Pertanyaan dan diskusi
- Pemecahan masalah skenario dunia nyata umum
- Langkah selanjutnya yang direkomendasikan untuk pengembangan Go
- Pustaka Go tambahan dan sumber daya ekosistem
- Lainnya peluang untuk membangun layanan Go yang siap produksi
Persyaratan
- Memahami prinsip pemrograman secara umum
Audience
- Pengembang (Developer)
Testimoni (5)
Instruktur membuktikan dirinya sebagai ahli topik yang tidak pernah saya anggap remeh. Dia memberikan wawasan sangat bermanfaat tentang standar industri.
Giuseppe
Kursus - Learning Go Programming
Diterjemahkan Mesin
Saya menikmati banyaknya latihan praktis yang kami lakukan. Secara pribadi, saya belajar dengan melakukan sesuatu, jadi sangat baik bahwa Francesco menyediakan banyak latihan praktis untuk dilakukan. Saya kesulitan memahami beberapa konsep dari slide, tetapi ketika saya benar-benar mencoba dan dapat mengimplementasikan beberapa fitur utama bahasa tersebut, hal itu membantu saya memahaminya lebih baik.
Adam Fitzhugh - OpticoreIT
Kursus - Learning Go Programming
Diterjemahkan Mesin
kecepatan pelatihan, kemampuan instruktur untuk membantu dan menjawab pertanyaan yang sedikit lebih sulit.
Andrei Mihai - Viasat
Kursus - Learning Go Programming
Diterjemahkan Mesin
Pengetahuan mendalam Radu dan penyesuaian kecepatan untuk saya.
Adeel Ahmad - Coefficient Data Ltd
Kursus - Learning Go Programming
Diterjemahkan Mesin
Kelincahan pelatih. Benar-benar menyesuaikan kursus sesuai dengan kebutuhan spesifik kami.
Daniel Kurner - Daimler TSS
Kursus - Learning Go Programming
Diterjemahkan Mesin