Cara membuat Http Server di Golang
HTTP server di Go adalah sebuah aplikasi yang mampu menerima permintaan HTTP dan memberikan respons berdasarkan permintaan tersebut. Dalam contoh kode yang Anda berikan, sebuah HTTP server sederhana dibuat menggunakan pustaka standar net/http
dari Go.
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type Product struct {
Name string `json:"name"`
Price int `json:"price"`
Stock int `json:"stock"`
}
var products []Product
func main() {
http.HandleFunc("/product", ProductHandler)
http.ListenAndServe(":8080", nil)
}
func ProductHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
// Handle GET request, return list of products
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(products)
} else if r.Method == "POST" {
// Handle POST request, parse request body and validate
var product Product
err := json.NewDecoder(r.Body).Decode(&product)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "Invalid request body")
return
}
// Basic validation
if product.Name == "" || product.Price <= 0 || product.Stock < 0 {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "Invalid product data")
return
}
// Save the product to the list
products = append(products, product)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(product)
} else {
w.WriteHeader(http.StatusMethodNotAllowed)
fmt.Fprintf(w, "Method not allowed")
}
}
Mari jelaskan bagian-bagian dari kode tersebut:
Struct
Product
:type Product struct { Name string `json:"name"` Price int `json:"price"` Stock int `json:"stock"` }
Struct
Product
digunakan untuk mendefinisikan bentuk data produk dengan tiga properti:Name
(nama produk),Price
(harga produk), danStock
(stok produk).Variabel
products
:var products []Product
Variabel
products
adalah slice dariProduct
, yang digunakan untuk menyimpan daftar produk yang dimasukkan oleh pengguna melalui permintaan HTTP POST.Fungsi
ProductHandler
:func ProductHandler(w http.ResponseWriter, r *http.Request) { // ... }
Fungsi
ProductHandler
adalah request handler untuk endpoint/product
. Fungsi ini menangani permintaan HTTP GET dan POST.HTTP Method Handling:
if r.Method == "GET" { // Handle GET request, return list of products // ... } else if r.Method == "POST" { // Handle POST request, parse request body and validate // ... } else { w.WriteHeader(http.StatusMethodNotAllowed) fmt.Fprintf(w, "Method not allowed") return }
Kode tersebut memeriksa metode HTTP dari permintaan (
r.Method
). Jika metodenya adalah GET, server akan mengembalikan daftar produk dalam format JSON. Jika metodenya adalah POST, server akan mendekode body JSON permintaan, memvalidasi datanya, dan menambahkan produk ke dalam daftarproducts
. Jika metode HTTP tidak valid (bukan GET atau POST), server akan memberikan respons dengan status "Method Not Allowed".Menjalankan HTTP Server:
func main() { http.HandleFunc("/product", ProductHandler) http.ListenAndServe(":8080", nil) }
Fungsi
main
menetapkanProductHandler
sebagai request handler untuk endpoint/product
dan kemudian menjalankan server HTTP pada port 8080.
Ketika Anda menjalankan program ini, Anda dapat mengakses http://localhost:8080/product
menggunakan HTTP client seperti browser atau curl. Saat melakukan GET request, server akan mengirimkan daftar produk yang sudah ada. Saat melakukan POST request dengan mengirimkan data produk dalam format JSON, server akan menambahkan produk baru ke dalam daftar products
setelah memvalidasi data tersebut.
Berikutnya untuk membuat hot reload di Golang menggunakan library Air dengan struktur proyek yang telah disebutkan, Anda dapat mengikuti langkah-langkah berikut:
Langkah 1: Install library Air
Jika Anda belum menginstal Air, jalankan perintah berikut untuk menginstalnya:
go get -u github.com/cosmtrek/air
Langkah 2: Inisialisasi Proyek dengan Air menggunakan air init
air init
Buka terminal atau command prompt, dan navigasikan ke direktori proyek Anda (project-folder/
). Kemudian, jalankan perintah berikut untuk menginisialisasi proyek Anda dengan Air:
air init
Perintah ini akan membuat file konfigurasi air.toml
di dalam direktori proyek Anda secara otomatis.
Langkah 3: Menjalankan Aplikasi dengan Hot Reload
Setelah proses inisialisasi selesai, Anda dapat menjalankan aplikasi Golang Anda dengan perintah berikut:
air
Sekarang, aplikasi Anda akan dijalankan menggunakan Air, dan setiap kali Anda menyimpan perubahan di file main.go
atau file-file lain dalam proyek, Air akan mendeteksi perubahan tersebut dan secara otomatis mengompilasi ulang aplikasi Anda, memungkinkan hot reload.
Pastikan Anda telah mengonfigurasi main.go
dengan benar sesuai dengan kebutuhan proyek Anda. Dengan langkah-langkah ini, Anda dapat mengaktifkan hot reload dalam proyek Golang Anda menggunakan library Air tanpa harus membuat file konfigurasi air.toml
secara manual.
Last updated