Selamat datang di seri tutorial pertama kita! Dalam seri ini, kita akan membangun sebuah aplikasi web e-commerce yang fungsional dari nol. Kita tidak akan menggunakan framework raksasa, melainkan membangunnya lapis demi lapis untuk benar-benar memahami cara kerja setiap komponen.
Tumpukan Teknologi (Tech Stack) yang akan kita gunakan:
- Go (Golang): Bahasa pemrograman utama kita untuk backend. Cepat, efisien, dan sangat cocok untuk membangun layanan web berperforma tinggi.
- PostgreSQL: Database relasional yang andal dan kuat untuk menyimpan data produk, pengguna, dan pesanan.
- Minio: Penyimpanan objek (object storage) yang kompatibel dengan Amazon S3. Kita akan menggunakannya untuk menyimpan gambar-gambar produk.
- UnoCSS: Sebuah engine CSS utility-first yang sangat cepat dan on-demand untuk menata tampilan frontend kita nanti.
Di bagian pertama ini, tujuan kita adalah menyiapkan semua fondasi yang diperlukan. Mari kita mulai!
Langkah 1: Prasyarat
Sebelum memulai, pastikan Anda sudah memiliki:
- Terminal atau Command Prompt: Kita akan banyak menggunakannya.
- Teks Editor: Visual Studio Code (VS Code) sangat direkomendasikan.
- Docker dan Docker Compose: Ini adalah cara termudah untuk menjalankan PostgreSQL dan Minio tanpa perlu instalasi manual yang rumit di sistem operasi Anda. Kunjungi situs resmi Docker untuk menginstalnya.
Langkah 2: Instalasi Teknologi Inti
2.1. Instalasi Go
Jika Anda belum menginstal Go, kunjungi halaman unduhan resmi di go.dev/dl/. Pilih installer yang sesuai untuk sistem operasi Anda (Windows, macOS, atau Linux) dan ikuti petunjuknya.
Setelah instalasi selesai, buka terminal Anda dan verifikasi dengan perintah:
go version
Anda akan melihat output seperti go version go1.23.3 linux/amd64
(versi dan OS bisa berbeda).
2.2. Menjalankan PostgreSQL & Minio dengan Docker
Ini adalah bagian favorit saya karena Docker membuatnya sangat sederhana. Buat sebuah folder baru untuk proyek kita, misalnya go-ecommerce
. Di dalam folder tersebut, buat sebuah file bernama docker-compose.yml
dan salin konten berikut:
services:
postgres:
image: postgres:15-alpine
container_name: go-ecommerce-db
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=ecommerce_db
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
minio:
image: minio/minio:latest
container_name: go-ecommerce-storage
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=miniosecret
ports:
- "9000:9000" # API Port
- "9001:9001" # Console Port
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
restart: unless-stopped
volumes:
postgres_data:
minio_data:
Sekarang, buka terminal di folder proyek Anda dan jalankan perintah:
docker-compose up -d
Perintah ini akan mengunduh image PostgreSQL dan Minio, lalu menjalankannya di background.
- PostgreSQL akan berjalan dan bisa diakses dari aplikasi kita di port
5432
. - Minio akan berjalan. Anda bisa mengakses Console-nya di browser melalui
http://localhost:9001
dengan usernameminioadmin
dan passwordminiosecret
.
Langkah 3: Membangun Struktur Proyek
Struktur folder yang baik akan membuat proyek kita rapi dan mudah dikelola. Kembali ke terminal, di dalam folder go-ecommerce
, buat struktur folder berikut:
mkdir -p cmd/web internal web/templates
cmd/web/
: Di sinilah filemain.go
kita akan berada, sebagai pintu masuk utama aplikasi.internal/
: Untuk kode-kode internal aplikasi yang tidak boleh diimpor oleh proyek lain (misalnya, koneksi database, logika bisnis).web/templates/
: Untuk menyimpan file-file template HTML kita.
Langkah 4: Inisialisasi Proyek Go
Sekarang, kita perlu memberitahu Go bahwa folder ini adalah sebuah proyek (modul). Jalankan perintah ini di direktori root proyek (go-ecommerce
):
go mod init github.com/kodekilat/go-ecommerce
Anda bisa mengganti
github.com/kodekilat/go-ecommerce
dengan nama modul Anda sendiri, biasanya mengikuti path repositori Anda.
Perintah ini akan membuat sebuah file baru bernama go.mod
. File ini akan melacak semua dependensi (library eksternal) yang kita gunakan.
Langkah 5: “Hello, E-commerce!” - Server Web Pertama
Saatnya menulis kode Go pertama kita! Buat sebuah file baru di cmd/web/main.go
dan isi dengan kode berikut:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
// Membuat multiplexer (router) baru
mux := http.NewServeMux()
// Mendaftarkan handler untuk root URL ("/")
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Selamat Datang di Toko Online Go!")
})
// Pesan bahwa server akan dimulai
log.Println("Memulai server di http://localhost:8080")
// Menjalankan server di port 8080
err := http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
}
Penjelasan Singkat:
- Kita menggunakan paket
net/http
bawaan Go. http.NewServeMux()
membuat router dasar untuk menangani request HTTP.mux.HandleFunc("/", ...)
mendaftarkan sebuah fungsi yang akan dieksekusi setiap kali ada request ke path/
.- Fungsi tersebut menulis string “Selamat Datang di Toko Online Go!” sebagai respons.
http.ListenAndServe(":8080", mux)
memulai server web di port 8080 dan menggunakannya untuk meneruskan request kemux
.
Untuk menjalankan server, buka terminal di root proyek dan jalankan:
go run ./cmd/web/main.go
Buka browser Anda dan kunjungi alamat http://localhost:8080
. Voila! Anda akan melihat pesan sambutan kita.
Penutup
Selamat!
Anda telah berhasil meletakkan fondasi yang sangat kokoh untuk aplikasi e-commerce kita. Anda sudah menginstal Go, menjalankan database dan object storage menggunakan Docker, serta membuat server web pertama yang berfungsi.
Di bagian selanjutnya, kita akan melangkah lebih jauh dengan:
- Menghubungkan aplikasi Go kita ke database PostgreSQL.
- Membuat skema tabel pertama untuk pengguna (users).
Terima kasih sudah mengikuti, sampai jumpa di artikel berikutnya!
Untuk referensi, Anda dapat melihat kode final dari tutorial ini di repositori GitHub berikut: Source code lengkap