Go بالأمثلة: خادم HTTP

كتابة خادم HTTP أساسي سهلة للغاية باستخدام حزمة net/http.

package main

import (
    "fmt"
    "net/http"
)

مفهوم مركزي في خوادم net/http هو “المعالجات” (handlers). المعالج هو كائن يطبق واجهة http.Handler. الطريقة الشائعة لكتابة معالج هي استخدام الدالة http.HandlerFunc مع توقيع الدالة المناسب.

func hello(w http.ResponseWriter, req *http.Request) {

الدوال التي تعمل كمعالجات تأخذ http.ResponseWriter و http.Request كمعاملات. يستخدم كاتب الرد لإرسال بيانات رد الـ HTTP.

    fmt.Fprintf(w, "hello\n")
}

func headers(w http.ResponseWriter, req *http.Request) {

هذا المعالج يقرأ جميع ترويسات طلب الـ HTTP ويعيدها في جسم الرد.

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}

func main() {

نقوم بتسجيل معالجاتنا في مسارات الخادم باستخدام http.HandleFunc. يقوم بضبط “الموجه” (router) الافتراضي في حزمة net/http.

    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

أخيراً، نستدعي ListenAndServe مع المنفذ والمعالج (nil هنا يعني استخدام الموجه الافتراضي).

    http.ListenAndServe(":8090", nil)
}

قم بتشغيل الخادم في الخلفية:

$ go run http-server.go &

ثم قم بطلب المسار /hello:

$ curl localhost:8090/hello
hello

المثال التالي: السياق (Context).