Go-তে HTTP Server তৈরি করা
Go তে HTTP সার্ভার তৈরি করা খুবই সহজ। Go-তে net/http প্যাকেজটি ব্যবহার করে আপনি সহজেই HTTP সার্ভার তৈরি করতে পারেন। এই প্যাকেজটি HTTP সার্ভার এবং ক্লায়েন্ট সম্পর্কিত সমস্ত কার্যকলাপ পরিচালনা করতে ব্যবহৃত হয়।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে Go তে HTTP সার্ভার তৈরি করা যায়, রাউটিং, এবং রিকোয়েস্ট হ্যান্ডলিং করা যায়।
১. Basic HTTP Server
Go তে একটি সিম্পল HTTP সার্ভার তৈরি করতে শুধুমাত্র http.HandleFunc() এবং http.ListenAndServe() ফাংশনগুলো ব্যবহার করা হয়।
১.১ Simple HTTP Server উদাহরণ
package main
import (
"fmt"
"net/http"
)
// একটি হ্যান্ডলার ফাংশন যা রিকোয়েস্ট পেলে একটি বার্তা রিটার্ন করবে
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
// রুট পাথে helloHandler ফাংশন সংযুক্ত করা
http.HandleFunc("/", helloHandler)
// সার্ভার শুরু করা
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}এখানে:
http.HandleFunc("/", helloHandler): এটি"/"পাথে রিকোয়েস্ট আসলেhelloHandlerফাংশনটি চালাবে।http.ListenAndServe(":8080", nil): এটি সার্ভার চালু করবে এবং পোর্ট 8080 তে অপেক্ষা করবে।
১.২ HTTP Server চালানো
এই কোডটি চালানোর পরে, আপনার সার্ভার localhost:8080 এ চলবে। আপনি আপনার ব্রাউজারে গিয়ে http://localhost:8080 এ গিয়ে "Hello, World!" বার্তা দেখতে পারবেন।
২. Multiple Routes Handling
Go তে একাধিক রাউট (routes) সেট করা এবং তাদের জন্য ভিন্ন ভিন্ন হ্যান্ডলার ফাংশন ব্যবহার করা খুবই সহজ। আপনি একাধিক http.HandleFunc() ফাংশন ব্যবহার করে বিভিন্ন রাউট হ্যান্ডল করতে পারেন।
২.১ Multiple Routes Example
package main
import (
"fmt"
"net/http"
)
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, "This is the About Page.")
}
func contactHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the Contact Page.")
}
func main() {
// বিভিন্ন রাউটের জন্য হ্যান্ডলার সংযোগ করা
http.HandleFunc("/", homeHandler)
http.HandleFunc("/about", aboutHandler)
http.HandleFunc("/contact", contactHandler)
// সার্ভার চালানো
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}এখানে:
http.HandleFunc("/", homeHandler):/রুটে আসলেhomeHandlerফাংশন চলবে।http.HandleFunc("/about", aboutHandler):/aboutরুটে আসলেaboutHandlerফাংশন চলবে।http.HandleFunc("/contact", contactHandler):/contactরুটে আসলেcontactHandlerফাংশন চলবে।
২.২ Multiple Routes Testing
এখন আপনি localhost:8080, localhost:8080/about, এবং localhost:8080/contact এই URL গুলিতে ব্রাউজ করে বিভিন্ন পৃষ্ঠায় যাওয়ার মাধ্যমে দেখতে পারবেন।
৩. Query Parameters এবং URL Parameters Handling
Go-তে HTTP রিকোয়েস্টের মধ্যে query parameters এবং URL parameters পেতে পারেন। r.URL.Query() দিয়ে আপনি query parameters এবং mux রাউটারের মাধ্যমে URL parameters পেতে পারেন।
৩.১ Query Parameters Example
package main
import (
"fmt"
"net/http"
)
func queryHandler(w http.ResponseWriter, r *http.Request) {
// URL query parameters
name := r.URL.Query().Get("name")
age := r.URL.Query().Get("age")
fmt.Fprintf(w, "Hello, %s! Your age is %s.", name, age)
}
func main() {
http.HandleFunc("/greet", queryHandler)
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}এখানে, /greet?name=John&age=30 URL ব্যবহার করলে এটি Hello, John! Your age is 30. বার্তা রিটার্ন করবে।
৪. Serving Static Files
Go তে সহজে static files (যেমন HTML, CSS, JavaScript, ছবি) সার্ভ করা যায় http.FileServer ফাংশনের মাধ্যমে।
৪.১ Static Files Serving Example
package main
import (
"fmt"
"net/http"
)
func main() {
// Static files serve করার জন্য
fs := http.FileServer(http.Dir("./static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}এখানে:
http.FileServer(http.Dir("./static")): এটি./staticডিরেক্টরিতে থাকা ফাইলগুলি সার্ভ করবে।http.StripPrefix("/static/", fs): এটি URL থেকে/static/প্রিফিক্স সরিয়ে ফাইল সার্ভ করবে।
এখন আপনি localhost:8080/static/filename URL দিয়ে static ফাইল অ্যাক্সেস করতে পারবেন।
৫. Handling POST Requests
Go-তে POST রিকোয়েস্ট হ্যান্ডেল করার জন্য r.Method চেক করা হয়। POST রিকোয়েস্টের বডি পড়ার জন্য r.ParseForm() ব্যবহার করতে হয়।
৫.১ POST Request Example
package main
import (
"fmt"
"net/http"
)
func postHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodPost {
// POST ডেটা পড়া
r.ParseForm()
name := r.FormValue("name")
age := r.FormValue("age")
fmt.Fprintf(w, "Received POST request. Name: %s, Age: %s", name, age)
} else {
http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
}
}
func main() {
http.HandleFunc("/submit", postHandler)
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}এখানে, /submit URL তে POST রিকোয়েস্ট করলে name এবং age ফর্ম ভ্যালু রিসিভ করা হবে।
এটি একটি HTML ফর্মের মাধ্যমে POST রিকোয়েস্ট পাঠাতে হবে:
<form action="/submit" method="post">
Name: <input type="text" name="name"><br>
Age: <input type="text" name="age"><br>
<input type="submit">
</form>৬. Middleware ব্যবহার
Go তে Middleware ফাংশন ব্যবহার করে আপনি রিকোয়েস্ট বা রেসপন্স প্রক্রিয়ায় ইন্টারসেপ্ট করতে পারেন এবং কিছু অতিরিক্ত কার্যকলাপ সম্পাদন করতে পারেন, যেমন লগিং, অথেনটিকেশন, ইত্যাদি।
৬.১ Middleware Example
package main
import (
"fmt"
"net/http"
)
func loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Request URL:", r.URL)
next.ServeHTTP(w, r)
})
}
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", helloHandler)
http.Handle("/log", loggingMiddleware(http.DefaultServeMux))
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}এখানে, loggingMiddleware ফাংশন রিকোয়েস্টের URL লগ করছে এবং তারপরে রিকোয়েস্ট প্রক্রিয়া সম্পন্ন করছে।
সারসংক্ষেপ
- HTTP Server: Go-তে HTTP সার্ভ
ার তৈরি করতে net/http প্যাকেজ ব্যবহৃত হয়।
- Routes and Handlers:
http.HandleFunc()ব্যবহার করে একাধিক রাউট হ্যান্ডল করা হয়। - Static File Serving:
http.FileServerদিয়ে static ফাইল সার্ভ করা যায়। - POST Requests: POST রিকোয়েস্ট হ্যান্ডল করার জন্য
r.Methodএবংr.ParseForm()ব্যবহার করা হয়। - Middleware: Middleware ফাংশন ব্যবহার করে রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়ায় অতিরিক্ত কার্যকলাপ সম্পাদন করা যায়।
Go তে HTTP সার্ভার তৈরি করার মাধ্যমে আপনি ওয়েব অ্যাপ্লিকেশন বা API তৈরি করতে পারবেন যা বিভিন্ন রাউট, মেথড, এবং ফিচার সমর্থন করবে।
Read more