HTTP Server তৈরি করা

Web Development with Go (ওয়েব ডেভেলপমেন্ট) - গো প্রোগ্রামিং (Go Programming) - Computer Programming

390

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 তৈরি করতে পারবেন যা বিভিন্ন রাউট, মেথড, এবং ফিচার সমর্থন করবে।

Content added By
Promotion

Are you sure to start over?

Loading...