Golang, atau Go, adalah bahasa pemrograman yang dikembangkan oleh Google pada tahun 2007. Golang dirancang untuk performa tinggi dan efisiensi, menjadikannya pilihan populer untuk backend modern.
Dalam artikel ini, kita akan membangun backend sederhana menggunakan Golang, mulai dari setup hingga implementasi API dan database.
Instalasi Golang
Pastikan Golang sudah terinstall dengan benar menggunakan command berikut:
go versionJika belum terpasang, kunjungi https://golang.org/dl dan pilih paket installer sesuai sistem operasi Anda (macOS, Linux, Windows). Setelah instalasi, verifikasi dengan perintah di atas.
Membuat Proyek Golang
Buat project baru dan inisialisasi module:
go mod init backend-golangIni akan membuat file go.mod yang mengelola dependensi dan modul aplikasi. Selanjutnya tambahkan package lain sesuai kebutuhan.
Struktur Proyek Backend
Susun direktori sehingga kode mudah dikelola: main.go untuk entry point, handler untuk logic HTTP, model untuk definisi data, router untuk rute, dan database untuk koneksi dan query.
/project
├── main.go
├── handler/
├── model/
├── router/
└── database/
Membuat HTTP Server
Buat server dasar dengan net/http. Ini adalah dasar untuk endpoint Anda sebelum ditambah middleware/container lainnya.
package main
import (
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("API Running 🚀"))
})
log.Println("Server running on :8080")
http.ListenAndServe(":8080", nil)
}
Routing dengan Handler
Definisikan endpoint GET dan POST menggunakan handler terpisah untuk menjaga single-responsibility dan menjaga kejelasan kode.
func GetUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"message":"get users"}`))
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("create user"))
}
Handling JSON Request
Gunakan struct dan encoding/json untuk parsing request body serta membalas response dalam format JSON. Selalu tutup body atau gunakan defer r.Body.Close() bila perlu.
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
var user User
json.NewDecoder(r.Body).Decode(&user)
json.NewEncoder(w).Encode(user)
}
Koneksi Database MySQL
Konfigurasi koneksi harus menggunakan credential aman dan environment variable. Gunakan sql.DB.Ping() untuk memastikan koneksi berhasil sebelum melanjutkan.
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func ConnectDB() (*sql.DB, error) {
db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/test")
if err != nil {
return nil, err
}
return db, nil
}
Query Data dari Database
Gunakan prepared statement untuk mencegah SQL injection. Perhatikan pemrosesan errors dan koneksi yang ditutup dengan defer rows.Close().
func GetUsers(db *sql.DB) ([]User, error) {
rows, err := db.Query("SELECT name, email FROM users")
if err != nil {
return nil, err
}
defer rows.Close()
var users []User
for rows.Next() {
var u User
rows.Scan(&u.Name, &u.Email)
users = append(users, u)
}
return users, nil
}
Middleware Logging
Middleware membantu menambahkan fungsionalitas cross-cutting seperti logging, autentikasi, dan CORS. Jalankan next handler setelah pre-processing.
func Logger(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println(r.Method, r.URL.Path)
next.ServeHTTP(w, r)
})
}
Best Practice Backend Golang
- Gunakan context untuk request
- Pisahkan handler dan business logic
- Gunakan environment variable
- Tambahkan logging dan monitoring
- Gunakan framework ringan seperti Fiber atau Gin
Kesimpulan
Dengan Golang, Anda dapat membangun backend yang cepat, scalable, dan efisien. Dengan memahami konsep dasar seperti routing, handler, dan database, Anda sudah siap membuat API production-ready.