Progress belajar
Modul 1 dari 73
0% 0/73 modul selesai
Setelah selesai, tandai modul ini agar progres kursus tetap rapi.
Progress disimpan lokal di browser ini.
Pengenalan Go
untuk Backend Developer
Di modul pertama ini kita menyamakan pola pikir: Go dipakai bukan karena Node.js atau PHP buruk, tetapi karena trade-off Go sangat cocok untuk backend yang ingin sederhana, cepat, eksplisit, dan mudah dioperasikan.
Kenapa Modul Ini Penting
Sebelum menulis endpoint, repository, worker, atau Dockerfile, kamu perlu tahu kenapa Go membentuk cara berpikir backend yang berbeda dari JavaScript dan PHP.
Kalau kamu datang dari React dan TypeScript, kamu sudah terbiasa memikirkan bentuk data, state, API contract, dan runtime JavaScript yang fleksibel. Kalau kamu pernah menyentuh Laravel, kamu mungkin juga terbiasa dengan framework yang sangat produktif, banyak konvensi, dan banyak fitur siap pakai.
Go mengambil jalur lain. Ia tidak mencoba menjadi framework besar. Ia memberi bahasa, standard library yang kuat, toolchain rapi, concurrency bawaan, dan gaya desain yang sengaja dibuat sederhana.
Modul ini sengaja belum menumpahkan sintaks. Kita tidak akan menghafal for, if, atau cara deklarasi variabel di sini, karena kamu sudah developer berpengalaman. Yang kita bangun dulu adalah model mental: kenapa Go terasa seperti ini, dan kenapa cara berpikirnya cocok untuk backend yang harus hidup lama di produksi.
Kamu sudah nyaman dengan TypeScript yang statically typed. Go lebih strict lagi, tidak ada any sebagai jalan pintas, tidak ada tipe yang menghilang saat runtime, dan compiler ikut menjaga kontrak sebelum aplikasi dijalankan.
Dalam proyek online shop skincare, pilihan bahasa backend bukan sekadar selera. Kita akan membangun katalog produk, keranjang, checkout, inventory, payment callback, background job, email, audit log, dan deploy ke AWS. Bagian-bagian itu butuh kode yang jelas, mudah dites, mudah dibaca ulang, dan tidak terlalu ajaib.
Target Modul
- Memahami Go sebagai bahasa compiled, statically typed, dan opinionated.
- Membandingkan Go dengan Node.js, TypeScript, PHP, dan Laravel secara adil.
- Melihat posisi Go API dan Go Worker di stack backend online shop skincare.
- Menjalankan program Go kecil supaya konsep tidak berhenti di teori.
Apa Itu Go
Go adalah bahasa pemrograman compiled, statically typed, garbage-collected, dengan concurrency built-in dan toolchain yang sengaja dibuat sederhana.
Situs resmi go.dev meringkas posisi Go dalam satu kalimat: “Build simple, secure, scalable systems with Go”. Go didukung Google, open-source, mudah dipelajari oleh tim, punya concurrency bawaan, dan standard library yang kuat. Untuk jalur Go Artisan ini, kita memakai Go seri 1.26 sesuai target proyek.
Go rilis seri mayor baru kira-kira tiap enam bulan (Februari dan Agustus). Seri 1.26 rilis Februari 2026. Di file go.mod nanti kita menulis baris go 1.26 untuk menyatakan versi minimum yang dipakai modul.
Kode Go dikompilasi menjadi binary executable sebelum dijalankan, sehingga hasil build bisa dikirim sebagai satu file aplikasi ke server atau container.
Tipe data diperiksa saat compile time, bukan baru ketahuan saat request produksi masuk ke endpoint.
Go punya preferensi kuat soal gaya kode, struktur sederhana, formatting otomatis, dependency management, dan error handling eksplisit.
Ada tiga hal yang akan terasa cepat bagi developer JavaScript dan PHP.
Bahasanya kecil
Jumlah konsep inti tidak banyak, jadi kamu lebih cepat masuk ke desain backend dibanding menghafal fitur bahasa.
Tooling bawaan
go fmt, go test, go mod, dan go run adalah bagian dari pengalaman standar, bukan pilihan plugin terpisah.
Runtime efisien
Go punya garbage collector dan goroutine, tetapi tetap menghasilkan binary yang praktis untuk service backend.
Di ekosistem JavaScript kamu sering memilih dulu: bundler, test runner, linter, formatter, gaya import, dan banyak konvensi tim. Go memangkas pilihan itu dengan menyediakan satu cara standar untuk format, test, dan build, sehingga energi pindah dari konfigurasi ke desain backend.
Go bukan bahasa tanpa runtime sama sekali. Binary Go tetap membawa runtime untuk garbage collector, scheduler goroutine, map, panic, reflection, dan fitur lain yang dibutuhkan program.
Kita tidak memilih Go karena ingin terlihat lebih low-level. Kita memilih Go karena ia memberi cukup kontrol untuk backend serius, tanpa membuat proses development terasa seberat bahasa sistem tradisional.
Kenapa Go Populer untuk Backend
Go populer di backend karena kombinasi simplicity, performance, concurrency bawaan, compile cepat, dan deployment yang sederhana.
Backend modern sering berisi banyak pekerjaan kecil yang harus stabil: menerima HTTP request, validasi input, bicara ke database, memanggil payment gateway, menulis log, menjalankan worker, dan memantau health check. Go cocok untuk pekerjaan seperti ini karena desain bahasanya mendorong jalur yang eksplisit.
Simplicity
Go mengurangi pilihan gaya yang terlalu banyak. Hasilnya, kode antar tim cenderung lebih mirip dan mudah dibaca.
Performance
Binary Go berjalan efisien untuk HTTP server, worker, CLI, dan tooling infrastruktur tanpa perlu banyak tuning di awal.
Concurrency built-in
Goroutine dan channel adalah fitur bahasa, bukan library tambahan. Ini berguna untuk worker, fan-out task, timeout, dan pipeline data.
Fast compile
Go dirancang agar compile terasa cepat, sehingga loop menulis kode, menjalankan test, lalu memperbaiki bug tetap nyaman.
Supaya tidak abstrak, berikut perbandingan langsung tiga pilihan yang mungkin pernah kamu pakai, dilihat dari sudut backend service.
| Dimensi | Node.js + TypeScript | PHP + Laravel | Go |
|---|---|---|---|
| Sistem tipe | TS di atas JS, hilang saat runtime | Dinamis, tipe opsional lewat anotasi | Statis, bagian inti bahasa, dicek compiler |
| Bawaan ke server | Source, node_modules, dan runtime Node | Source, runtime PHP, dan ekstensi | Satu binary mandiri |
| Concurrency | Event loop satu thread, async dan await | Umumnya per request, antar proses | Goroutine dan channel bawaan |
| Startup proses | Cepat, perlu Node terpasang | Cepat lewat PHP-FPM dan web server | Sangat cepat, cukup jalankan binary |
| Gaya kerja | Banyak pilihan dan konfigurasi | Banyak konvensi dan magic framework | Sedikit cara, eksplisit, satu formatter |
Tabel 1. Bukan soal mana yang terbaik mutlak, tetapi soal trade-off mana yang paling cocok untuk service backend yang harus dioperasikan jangka panjang.
Kenapa bukan Node.js?
Node.js sangat bagus untuk tim yang sudah kuat JavaScript end-to-end, butuh ekosistem npm besar, atau ingin satu bahasa dari frontend sampai backend. Tetapi untuk service backend jangka panjang, Go memberi binary deployment yang lebih sederhana, tipe yang selalu ada saat compile, dan concurrency model yang tidak bergantung pada event loop JavaScript.
Kenapa bukan PHP atau Laravel?
Laravel sangat produktif untuk aplikasi web monolitik, admin panel, dan tim yang ingin fitur framework siap pakai. Tetapi Go lebih menarik saat kita ingin service kecil, worker, CLI, dan proses deployment yang dekat dengan container dan cloud-native tooling.
Online shop skincare bukan hanya CRUD produk. Ada checkout, reservation inventory, callback payment, email, notifikasi, sinkronisasi stok, dan background job yang akan lebih mudah dikelola bila kode backend eksplisit dan mudah dites.
Go bukan pengganti universal untuk Node.js atau Laravel. Pilih Go saat kamu menghargai binary deployment, strict typing, concurrency eksplisit, dan kode backend yang minim magic.
Compiled vs Interpreted
Perbedaan compiled dan interpreted paling terasa di cara aplikasi dijalankan, cara error ditemukan, dan cara kita mengirim aplikasi ke server.
Di Node.js, file JavaScript biasanya dibaca dan dieksekusi oleh runtime Node.js. Di Go, file .go dikompilasi lebih dulu menjadi executable. Kamu tetap bisa memakai go run saat development, tetapi di balik layar Go tetap melakukan proses compile sebelum menjalankan program.
flowchart TB
subgraph node["Cara interpreted (Node.js)"]
direction LR
A1["main.js + node_modules"] --> A2["Node.js runtime di server"] --> A3["program berjalan"]
end
subgraph gobuild["Cara compiled (Go)"]
direction LR
B1["main.go"] --> B2["go build"] --> B3["binary mandiri"] --> B4["program berjalan"]
endGambar 1. Node membawa source, dependency, dan runtime ke server. Go memadatkan semuanya menjadi satu binary saat build, lalu server cukup menjalankan binary itu.
- Server butuh Node.js runtime.
- Error tertentu baru muncul saat jalur kode dieksekusi.
- Deployment biasanya membawa source, dependency, dan runtime.
- Server menjalankan hasil build berupa binary.
- Banyak kesalahan tipe dan import berhenti di compile time.
- Deployment container bisa sederhana karena binary sudah membawa aplikasi.
Contoh paling kecil.
cmd/hello/main.gopackage main import "fmt" func main() { fmt.Println("Go Artisan: backend online shop skincare") }
Jalankan dengan mode development.
Terminalgo run ./cmd/hello
Build menjadi binary.
Terminalgo build -o bin/skincare ./cmd/hello ./bin/skincare
go run mirip pesan makanan yang langsung dimasak dan dimakan. go build mirip menyiapkan paket makanan rapi yang bisa dikirim ke tempat lain dan dibuka tanpa membawa dapur lengkap.
Untuk backend production, pola go build sangat nyaman. Kita bisa build binary di CI, bungkus ke Docker image, lalu jalankan di ECS, EC2, atau service lain. Modul deploy akan membahas detailnya, tetapi pola pikirnya dimulai dari sini.
Static Typing yang Lebih Ketat dari TypeScript
TypeScript memberi rasa aman di atas JavaScript, sedangkan Go menjadikan tipe sebagai bagian asli dari bahasa dan proses compile.
TypeScript membantu developer React menghindari bug bentuk data, props, response API, dan union state. Tetapi TypeScript akhirnya dikompilasi menjadi JavaScript, sehingga tipe tidak menjadi bagian dari runtime JavaScript. Go berbeda. Tipe adalah bagian inti bahasa dan compiler akan menolak program yang melanggar kontrak tipe.
anybisa mematikan proteksi tipe.- Tipe hilang setelah transpilasi ke JavaScript.
- Runtime tetap JavaScript dan tetap bisa menerima data liar dari luar.
- Tidak ada
anysebagai jalan pintas universal. - Compiler menolak operasi yang tidak cocok secara tipe.
- Data dari luar harus diparse, divalidasi, dan dipetakan ke struct dengan jelas.
Contoh kontrak data produk skincare.
internal/product/product.gopackage product type Product struct { ID int64 Name string Brand string SkinType string PriceRupiah int64 Stock int IsPublished bool } func CanBeSold(p Product) bool { return p.IsPublished && p.Stock > 0 && p.PriceRupiah > 0 }
Kalau kamu mencoba mengisi PriceRupiah dengan string di dalam kode Go, compiler akan protes sebelum aplikasi jalan.
internal/product/broken_example.gopackage product func BrokenProduct() Product { return Product{ ID: 101, Name: "Hydrating Toner", Brand: "Glow Lab", PriceRupiah: "129000", // error: cannot use "129000" (untyped string) as int64 } }
Kode di atas gagal dikompilasi karena PriceRupiah butuh int64, bukan string. Ini terasa cerewet di awal, tetapi sangat membantu saat proyek mulai punya banyak fitur dan banyak kontributor.
Tidak ada undefined, yang ada zero value
Salah satu kebiasaan JavaScript yang perlu dilepas adalah refleks mengecek undefined dan null di mana-mana. Di Go, setiap variabel yang dideklarasikan selalu punya nilai awal yang pasti sesuai tipenya. Tidak ada keadaan “belum terdefinisi” yang mengambang.
Nilai default otomatis tiap tipe saat dideklarasikan tanpa nilai awal: 0 untuk angka, "" untuk string, false untuk bool, dan nil untuk pointer, slice, map, serta interface. Tidak ada undefined seperti di JavaScript.
internal/product/zero_value.gopackage product func DraftProduct() Product { var p Product // semua field langsung terisi zero value // p.Name == "" (string) // p.Stock == 0 (int) // p.PriceRupiah == 0 (int64) // p.IsPublished == false (bool) return p }
Kalau di TypeScript kamu biasa menulis type ProductResponse = ..., di Go kamu akan menulis type Product struct .... Bedanya, struct Go ikut diperiksa compiler saat build backend, bukan hanya membantu editor.
Static typing tidak menggantikan validasi input. JSON dari user, query parameter, dan webhook payment tetap harus divalidasi karena data dari luar datang sebagai byte dan string yang belum tentu benar.
Filosofi Simplicity-First
Go sengaja memilih bahasa yang kecil dan pola yang eksplisit supaya program jangka panjang mudah dirawat.
Effective Go menekankan bahwa menulis Go dengan baik berarti memahami properti, idiom, dan konvensi Go. Ini penting karena Go tidak hanya soal sintaks, tetapi juga gaya berpikir: lebih sedikit magic, lebih banyak alur yang terlihat.
Bagi developer React, ini mirip saat tim sepakat memakai pola state management yang jelas, bukan setiap halaman punya arsitektur berbeda. Bagi developer Laravel, ini berbeda dari framework yang menyediakan banyak magic lewat container, facade, model lifecycle, dan convention over configuration.
Formatting satu standar
gofmt membuat perdebatan gaya indentasi dan spacing hampir hilang.
Error eksplisit
Fungsi yang bisa gagal biasanya mengembalikan error, lalu pemanggil wajib memutuskan responsnya.
Import jelas
Dependency terlihat dari import dan go.mod, bukan terselip dalam global helper atau magic autoload.
Contoh gaya eksplisit saat mengambil produk.
internal/product/service.gopackage product import "context" type Repository interface { FindByID(ctx context.Context, id int64) (Product, error) } type Service struct { repo Repository } func NewService(repo Repository) *Service { return &Service{repo: repo} } func (s *Service) Detail(ctx context.Context, id int64) (Product, error) { p, err := s.repo.FindByID(ctx, id) if err != nil { return Product{}, err } return p, nil }
Perhatikan pola yang akan sering muncul di modul berikutnya: context.Context sebagai parameter pertama, dependency lewat interface kecil, constructor mengembalikan struct, dan error dikembalikan sebagai nilai.
Di Laravel, Service sering otomatis mendapat dependency lewat container dan type-hint constructor. Di Go tidak ada container ajaib: kita merakit dependency sendiri lewat fungsi seperti NewService(repo). Awalnya terasa manual, tetapi alur dependency jadi gamblang dan mudah ditelusuri.
Untuk service layer, biasakan menerima interface kecil yang dibutuhkan dan mengembalikan struct konkret. Ini menjaga kode mudah dites tanpa membuat desain terlalu abstrak.
Use Case Backend yang Cocok untuk Go
Go nyaman dipakai untuk REST API, background job, worker, CLI, dan infrastructure tooling.
Dalam proyek nyata, backend bukan hanya satu web server. Ada API yang menerima request dari frontend, worker yang mengerjakan pekerjaan lambat, CLI untuk maintenance, dan tool kecil untuk migrasi atau seed data. Go bisa mengisi semuanya dengan bahasa dan toolchain yang sama.
REST API
Go API menerima request dari React frontend, validasi payload, menjalankan service, lalu mengembalikan JSON.
Background job
Worker memproses email order confirmation, sinkronisasi stok, cleanup cart lama, dan retry webhook.
CLI internal
Command kecil bisa dipakai untuk seed kategori skincare, membuat admin pertama, atau menjalankan backfill data.
Infrastructure tooling
Banyak tool cloud-native memakai Go karena binary mudah didistribusikan dan performanya baik untuk operasi sistem.
Untuk REST API, gambaran konkretnya kira-kira seperti ini. Kita belum membangunnya sekarang, tetapi bentuk endpoint inilah yang akan kita kejar di Roadmap 2.
/v1/products Daftar produk skincare dengan filter skin type dan paginasi /v1/cart/items Tambah produk ke keranjang pembeli /v1/checkout Ubah keranjang jadi order dalam satu transaksi - cmd/
- api/
- main.go entry point HTTP API
- worker/
- main.go entry point background worker
- skincarectl/
- main.go CLI internal proyek
- internal/
- product/ fitur katalog produk skincare
- cart/ fitur keranjang
- checkout/ fitur checkout dan order
- go.mod
Struktur di atas belum final. Modul arsitektur akan merapikan package, layer, config, dependency injection sederhana, dan batas antar domain.
Posisi Go di Stack Online Shop Skincare
Di proyek kita, Go akan menjadi API layer dan worker layer yang menghubungkan frontend React, PostgreSQL, payment provider, dan layanan pendukung.
Diagram berikut menunjukkan gambaran awal. Kita belum bicara chi, pgx, Docker, atau AWS secara detail, tetapi kamu sudah bisa melihat kenapa Go cocok berada di pusat backend.
flowchart LR
FE["React Frontend"] -->|HTTP JSON| API["Go API Layer"]
API -->|service domain| Domain["Service Layer"]
Domain -->|SQL via pgx| DB[("PostgreSQL")]
API -->|enqueue task| Queue["Job Queue"]
Queue --> Worker["Go Worker Layer"]
Worker -->|email, sync stok, retry webhook| External["Email / Payment / Inventory"]
Worker --> DBGambar 2. Posisi Go API dan Go Worker di stack backend online shop skincare.
Untuk melihat kenapa pembagian API dan worker itu penting, perhatikan satu alur checkout. API mengerjakan bagian yang harus cepat dan pasti, lalu menyerahkan pekerjaan lambat ke worker.
sequenceDiagram participant FE as React Frontend participant API as Go API participant DB as PostgreSQL participant Q as Job Queue participant W as Go Worker FE->>API: POST /v1/checkout API->>DB: Simpan order dan kunci stok (transaksi) API->>Q: Antre job kirim email invoice API-->>FE: 201 Created (jalur cepat) Q->>W: Serahkan job W->>W: Kirim email, sinkron stok ke gudang W->>DB: Tandai job selesai
Gambar 3. API menahan hanya pekerjaan inti checkout. Email dan sinkronisasi stok dikerjakan worker setelah respons dikirim, sehingga pembeli tidak menunggu pekerjaan lambat.
API layer
API layer adalah pintu masuk dari frontend. Contohnya GET /v1/products, POST /v1/cart/items, dan POST /v1/checkout. Modul Roadmap 2 akan memakai net/http dan chi untuk routing, middleware, dan handler yang rapi. Sejak Go 1.22, net/http bahkan sudah bisa routing berbasis method dan path sederhana, lalu chi melengkapi kebutuhan middleware dan grup rute.
Worker layer
Worker layer menangani pekerjaan yang tidak harus selesai di dalam request utama. Contohnya mengirim email invoice, sinkronisasi stok ke sistem gudang, membersihkan cart kadaluarsa, dan retry notifikasi payment provider.
PostgreSQL
PostgreSQL menjadi sumber data utama. Nanti kita memakai pgx dan pgxpool untuk query, transaksi checkout, lock stok, dan repository layer.
Bayangkan Go API seperti server action yang benar-benar terpisah dan lebih strict. React mengirim intent lewat HTTP, Go memvalidasi, menjalankan aturan bisnis, lalu menyimpan state final ke PostgreSQL.
Request checkout sebaiknya tidak mengirim email langsung di path utama. API cukup membuat order dan job, worker mengurus pekerjaan lambat setelah transaksi utama aman.
Hands-on Ringan
Sekarang kita buat program Go kecil yang mensimulasikan service katalog produk skincare tanpa framework.
Tujuan hands-on ini bukan membangun API production. Tujuannya hanya melihat bagaimana Go memakai module, package, struct, function, compile, dan run.
Kita mulai dengan module Go yang nanti menjadi cikal bakal backend online shop skincare.
Kita buat struct Product dan fungsi kecil untuk mengecek apakah produk bisa dijual.
go runKita pakai go run untuk development loop cepat.
Kita pakai go build agar kamu merasakan perbedaan source code dan executable.
Terminalmkdir skincare-backend cd skincare-backend go mod init github.com/kamu/skincare-backend mkdir -p cmd/catalog internal/product
internal/product/product.gopackage product type Product struct { ID int64 Name string Brand string SkinType string PriceRupiah int64 Stock int IsPublished bool } func CanBeSold(p Product) bool { return p.IsPublished && p.Stock > 0 && p.PriceRupiah > 0 }
cmd/catalog/main.gopackage main import ( "fmt" "github.com/kamu/skincare-backend/internal/product" ) func main() { toner := product.Product{ ID: 101, Name: "Hydrating Toner", Brand: "Glow Lab", SkinType: "dry", PriceRupiah: 129000, Stock: 12, IsPublished: true, } fmt.Printf("%s bisa dijual: %t\n", toner.Name, product.CanBeSold(toner)) }
Terminalgo fmt ./... go run ./cmd/catalog go build -o bin/catalog ./cmd/catalog ./bin/catalog
Output yang diharapkan.
TerminalHydrating Toner bisa dijual: true
Contoh memakai PriceRupiah sebagai integer agar tidak memakai floating point untuk uang. Untuk proyek Indonesia, nama PriceRupiah membuat satuan lebih jelas saat membaca domain model.
Ubah Stock menjadi 0, lalu jalankan ulang go run ./cmd/catalog. Output berubah menjadi false. Loop edit, run, lihat hasil yang cepat inilah salah satu alasan Go nyaman dipakai sehari-hari.
Jebakan Umum dari JS dan PHP
Developer JS dan PHP biasanya cepat produktif di Go, tetapi beberapa kebiasaan lama perlu ditahan.
1. Mencari framework besar terlalu cepat
Di Laravel, framework adalah pusat gravitasi. Di Go, standard library dan package kecil sering lebih idiomatik. Kita akan memakai chi untuk routing, tetapi tetap menjaga bisnis utama tidak bergantung pada router.
2. Menganggap compiler sebagai musuh
Compiler Go memang cerewet. Import tidak dipakai, variabel tidak dipakai, tipe tidak cocok, semua akan dihentikan. Ini bukan penghambat, ini mekanisme menjaga codebase tetap bersih.
3. Membawa pola any ke Go
Go punya any sebagai alias resmi untuk empty interface sejak Go 1.18, tetapi ia bukan alat default untuk melewati desain tipe. Untuk domain online shop, struct yang jelas lebih aman daripada peta bebas yang isinya ditebak saat runtime.
4. Menyembunyikan error
Di JavaScript dan PHP, error sering ditangani dengan exception atau framework handler global. Di Go, error adalah nilai. Kalau operasi database gagal, service harus memutuskan apakah error diteruskan, dibungkus, atau diterjemahkan ke response yang tepat.
5. Membuat abstraction terlalu awal
Karena terbiasa dengan design pattern, developer sering membuat folder dan interface banyak sebelum ada kebutuhan nyata. Go biasanya lebih suka abstraksi kecil yang muncul dari kebutuhan testing dan boundary yang jelas.
Jebakan yang Harus Diingat
- Jangan mencari Laravel versi Go. Cari gaya Go yang sederhana dan eksplisit.
- Jangan melawan compiler. Biarkan compiler menjadi reviewer pertama.
- Jangan memakai
anyuntuk domain data yang seharusnya punya bentuk jelas. - Jangan menelan error. Error adalah bagian dari kontrak fungsi.
- Jangan membuat arsitektur besar sebelum modul sederhana bisa berjalan dan dites.
Ringkasan & Poin Penting
Modul ini memberi fondasi mental sebelum kita masuk ke sintaks, package, function, pointer, error handling, dan HTTP API.
Yang Wajib Menempel
- Go adalah bahasa compiled, statically typed, garbage-collected, dan opinionated, cocok untuk backend yang butuh kejelasan dan deployment sederhana.
- Go dipilih untuk proyek online shop skincare karena cocok untuk API layer dan worker layer, bukan karena Node.js atau Laravel buruk.
- Bridge utama dari TypeScript adalah static typing, tetapi Go lebih strict karena tipe menjadi bagian asli bahasa, diperiksa saat compile, dan tidak punya undefined (yang ada zero value).
- Compiled workflow membuat kita berpikir tentang source code, build artifact, binary, Docker image, dan deployment sejak awal.
- Simplicity-first berarti lebih sedikit magic, error eksplisit, formatting otomatis, package kecil, dan dependency yang terlihat.
Pemetaan ke proyek
Go API akan menangani request dari React frontend, menjalankan service domain, dan menyimpan data utama ke PostgreSQL.
Pemetaan ke worker
Go Worker akan memproses pekerjaan lambat seperti email, sinkronisasi stok, cleanup cart, dan retry webhook payment.
Langkah berikutnya
Modul berikutnya, Setup Go dan Developer Workflow, memasang Go di mesinmu lalu mengenalkan go mod init, go run, go build, go test, dan go fmt.
Prinsip belajar
Setiap fitur bahasa akan selalu dikaitkan ke kebutuhan backend online shop, bukan dipelajari sebagai sintaks kosong.
Pastikan kamu bisa membayangkan kenapa Go memilih binary mandiri, kenapa tipe ada sejak compile, dan kenapa compiler Go sengaja menghentikan kode yang tidak rapi. Detail instalasi dan perintahnya kita kerjakan di modul berikutnya.
Progress disimpan lokal di browser ini.