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 - Productdigunakan untuk mendefinisikan bentuk data produk dengan tiga properti:- Name(nama produk),- Price(harga produk), dan- Stock(stok produk).
- Variabel - products:- var products []Product- Variabel - productsadalah slice dari- Product, 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 - ProductHandleradalah 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 daftar- products. 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 - mainmenetapkan- ProductHandlersebagai request handler untuk endpoint- /productdan 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/airLangkah 2: Inisialisasi Proyek dengan Air menggunakan air init
air initBuka terminal atau command prompt, dan navigasikan ke direktori proyek Anda (project-folder/). Kemudian, jalankan perintah berikut untuk menginisialisasi proyek Anda dengan Air:
air initPerintah 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:
airSekarang, 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
