Web Server #
Web Server di Golang #
Golang memiliki paket net/http
yang memudahkan pengembangan web server. Dengan menggunakan paket ini, Anda dapat membuat server HTTP yang mendukung berbagai metode HTTP seperti GET, POST, PUT, DELETE, dan lainnya. Berikut adalah beberapa konsep dasar dan contoh untuk membangun web server di Golang.
Membuat Web Server Sederhana #
Berikut adalah contoh sederhana dari web server di Golang yang menangani permintaan HTTP GET.
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Starting server at port 8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}
Dalam contoh ini:
http.HandleFunc("/", handler)
mengasosiasikan fungsihandler
dengan route/
.- Fungsi
handler
menulis “Hello, World!” kehttp.ResponseWriter
. http.ListenAndServe(":8080", nil)
memulai server pada port 8080.
Menangani Berbagai Metode HTTP #
Anda dapat menangani berbagai metode HTTP seperti GET dan POST dengan memeriksa metode permintaan dalam handler.
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
fmt.Fprintf(w, "GET request received")
} else if r.Method == http.MethodPost {
fmt.Fprintf(w, "POST request received")
} else {
http.Error(w, "Unsupported method", http.StatusMethodNotAllowed)
}
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Starting server at port 8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}
Menggunakan Router Pihak Ketiga #
Untuk aplikasi yang lebih kompleks, Anda dapat menggunakan router pihak ketiga seperti gorilla/mux
yang mendukung routing lebih canggih.
Instalasi gorilla/mux
#
go get -u github.com/gorilla/mux
Contoh Menggunakan gorilla/mux
#
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the Home Page!")
}
func aboutHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "About Page")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/", homeHandler).Methods("GET")
r.HandleFunc("/about", aboutHandler).Methods("GET")
fmt.Println("Starting server at port 8080")
if err := http.ListenAndServe(":8080", r); err != nil {
fmt.Println("Error starting server:", err)
}
}
Dalam contoh ini:
mux.NewRouter()
membuat instance router baru.r.HandleFunc("/", homeHandler).Methods("GET")
mengasosiasikan fungsihomeHandler
dengan route/
untuk metode GET.http.ListenAndServe(":8080", r)
memulai server dengan routermux
.
Menangani Static Files #
Untuk melayani file statis seperti gambar, CSS, atau JavaScript, Anda dapat menggunakan http.FileServer
.
package main
import (
"net/http"
)
func main() {
fs := http.FileServer(http.Dir("./static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "index.html")
})
http.ListenAndServe(":8080", nil)
}
Dalam contoh ini:
http.FileServer(http.Dir("./static"))
membuat handler file server untuk direktori./static
.http.Handle("/static/", http.StripPrefix("/static/", fs))
mengasosiasikan handler file server dengan route/static/
.
Middleware #
Middleware adalah fungsi yang membungkus handler untuk menambahkan fungsionalitas seperti logging, autentikasi, atau pengaturan header.
package main
import (
"fmt"
"log"
"net/http"
"time"
)
func loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
next.ServeHTTP(w, r)
log.Printf("%s %s %s", r.Method, r.RequestURI, time.Since(start))
})
}
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Home Page")
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", homeHandler)
wrappedMux := loggingMiddleware(mux)
fmt.Println("Starting server at port 8080")
if err := http.ListenAndServe(":8080", wrappedMux); err != nil {
fmt.Println("Error starting server:", err)
}
}
Dalam contoh ini:
loggingMiddleware
adalah middleware yang mencatat waktu yang diperlukan untuk setiap permintaan.wrappedMux
adalah mux yang dibungkus oleh middleware.
Kesimpulan #
Membangun web server di Golang sangat mudah berkat paket net/http
. Dengan kemampuan untuk menangani berbagai metode HTTP, melayani file statis, dan menggunakan middleware, Golang menyediakan semua alat yang Anda butuhkan untuk mengembangkan aplikasi web yang kuat dan efisien. Untuk aplikasi yang lebih kompleks, router pihak ketiga seperti gorilla/mux
dapat digunakan untuk routing yang lebih canggih.