Backend

Membangun Backend dengan Golang: Panduan Lengkap

Pelajari cara membangun backend yang cepat dan efisien menggunakan Golang, bahasa pemrograman yang populer untuk pengembangan web modern.

Rama Mai01 Okt 202310 min read

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 version

Jika 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-golang

Ini 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.