Belajar Golang CRUD adalah langkah tepat untuk menguasai pengembangan backend modern. Artikel ini akan memandu Anda membangun REST API lengkap menggunakan bahasa Go (Golang). Dengan mengikuti tutorial ini, Anda akan memahami konsep dasar CRUD, struktur proyek, hingga implementasi nyata dengan database.
Mengapa Golang untuk REST API?
Golang menawarkan performa tinggi, kemudahan konkurrensi, dan ekosistem yang solid. Banyak perusahaan seperti Google, Docker, dan Kubernetes menggunakan Go untuk layanan backend. Belajar Golang CRUD memberi Anda fondasi kuat untuk membangun API yang skalabel.
Persiapan Proyek
Sebelum memulai, pastikan Anda telah menginstal Go dan editor teks (VS Code/Goland). Kita akan menggunakan router Gin dan driver PostgreSQL. Buat folder proyek dan inisialisasi modul:
mkdir belajar-golang-crud && cd belajar-golang-crud
go mod init github.com/username/belajar-golang-crud
go get github.com/gin-gonic/gin
go get gorm.io/gorm
go get gorm.io/driver/postgres
Struktur folder standar: main.go, models/, controllers/, config/.
Konfigurasi Database
Buat file config/db.go untuk mengatur koneksi database PostgreSQL menggunakan GORM:
package config
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
var DB *gorm.DB
func ConnectDatabase() {
dsn := "host=localhost user=postgres password=secret dbname=crud_db port=5432 sslmode=disable"
database, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("Gagal koneksi database!")
}
DB = database
}
Implementasi CRUD
Kita akan membuat entitas User dengan field ID, Nama, Email, dan umpan balik JSON. Berikut langkah-langkahnya:
Definisi Model
Buat file models/user.go untuk mendefinisikan struktur data tabel user:
package models
type User struct {
ID uint `json:"id" gorm:"primaryKey"`
Nama string `json:"nama"`
Email string `json:"email" gorm:"unique"`
}
Create (Membuat Data)
Buat handler POST yang menerima JSON, validasi input, dan simpan ke database.
Buat struct User di models/user.go.
Endpoint: POST /users
Contoh respons: 201 Created dengan data user baru.
Implementasi handler Create pada file controllers/usercontroller.go:
package controllers
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/username/belajar-golang-crud/config"
"github.com/username/belajar-golang-crud/models"
)
func CreateUser(c *gin.Context) {
var input models.User
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
config.DB.Create(&input)
c.JSON(http.StatusCreated, input)
}
Read (Membaca Data)
Buat handler GET untuk mengambil semua user atau user berdasarkan ID.
GET /users → daftar semua user.
GET /users/:id → user spesifik.
Gunakan GORM query Find dan First.
Tambahkan fungsi berikut di controllers/usercontroller.go:
func FindUsers(c *gin.Context) {
var users []models.User
config.DB.Find(&users)
c.JSON(http.StatusOK, users)
}
func FindUserById(c *gin.Context) {
var user models.User
if err := config.DB.Where("id = ?", c.Param("id")).First(&user).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Data tidak ditemukan!"})
return
}
c.JSON(http.StatusOK, user)
}
Update (Memperbarui Data)
Handler PUT untuk mengubah data user yang ada.
Endpoint: PUT /users/:id
Partial update dengan Save atau Updates.
Validasi field yang diubah, kirim 200 atau 404 jika tidak ditemukan.
Tambahkan fungsi berikut untuk proses update data:
func UpdateUser(c *gin.Context) {
var user models.User
if err := config.DB.Where("id = ?", c.Param("id")).First(&user).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Data tidak ditemukan!"})
return
}
var input models.User
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
config.DB.Model(&user).Updates(input)
c.JSON(http.StatusOK, user)
}
Delete (Menghapus Data)
Handler DELETE untuk menghapus user berdasarkan ID.
Endpoint: DELETE /users/:id
Delete di GORM, respons 204 No Content.
Pastikan hanya admin yang bisa menghapus (middleware sederhana).
Tambahkan fungsi berikut untuk proses hapus data:
func DeleteUser(c *gin.Context) {
var user models.User
if err := config.DB.Where("id = ?", c.Param("id")).First(&user).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Data tidak ditemukan!"})
return
}
config.DB.Delete(&user)
c.JSON(http.StatusNoContent, nil)
}
Inisialisasi Router dan Aplikasi
Tulis kode utama pada file main.go untuk menghubungkan database, menjalankan migrasi skema, dan meregistrasikan endpoint API:
package main
import (
"github.com/gin-gonic/gin"
"github.com/username/belajar-golang-crud/config"
"github.com/username/belajar-golang-crud/controllers"
"github.com/username/belajar-golang-crud/models"
)
func main() {
r := gin.Default()
config.ConnectDatabase()
config.DB.AutoMigrate(&models.User{})
r.POST("/users", controllers.CreateUser)
r.GET("/users", controllers.FindUsers)
r.GET("/users/:id", controllers.FindUserById)
r.PUT("/users/:id", controllers.UpdateUser)
r.DELETE("/users/:id", controllers.DeleteUser)
r.Run()
}
Testing API
Gunakan Postman atau curl untuk menguji setiap endpoint. Contoh curl:
curl -X POST http://localhost:8080/users -H "Content-Type: application/json" -d '{"nama":"Budi", "email":"budi@example.com"}'
Hasil respons dari server setelah menjalankan perintah curl di atas adalah objek JSON baru dengan status HTTP 201 Created:
{
"id": 1,
"nama": "Budi",
"email": "budi@example.com"
}
Lihat respon dan simpan hasilnya. Jika ada error, periksa koneksi database dan validasi input.
Kesimpulan
Belajar Golang CRUD dan membangun REST API memberikan Anda keterampilan esensial untuk menjadi backend developer. Praktikkan dengan proyek nyata seperti manajemen produk atau blog. Semoga tutorial ini bermanfaat! Jangan lupa untuk terus eksplorasi topik lanjutan seperti autentikasi JWT, middleware, dan deployment.