Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich das Go Http Server-Framework schnell implementieren? In einem Artikel erledigt

Wie kann ich das Go Http Server-Framework schnell implementieren? In einem Artikel erledigt

藏色散人
藏色散人nach vorne
2022-12-13 16:55:454887Durchsuche

Dieser Artikel führt Sie in das relevante Wissen über Golang ein und erläutert, wie Sie das Go Http Server-Framework schnell implementieren können. Ich hoffe, dass es Ihnen hilfreich sein wird.

Wenn Sie einen HTTP-Server in Go verwenden möchten, ist es am einfachsten, http/net

err := http.ListenAndServe(":8080", nil)if err != nil {
    panic(err.Error())}http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
    writer.Write([]byte("Hello"))})

zu verwenden, um die Handle-Funktion zu definieren. [Verwandte Empfehlungen: Go-Video-Tutorial]

type HandlerFunc func(ResponseWriter, * Request) code><code>type HandlerFunc func(ResponseWriter, *Request)

标准库的 http 服务器实现很简单,开启一个端口,注册一个实现HandlerFunc

Die HTTP-Server-Implementierung der Standardbibliothek ist sehr einfach. Öffnen Sie einen Port und registrieren Sie einen Handler, der HandlerFunc implementiert.

Gleichzeitig bietet die Standardbibliothek auch eine Methode zur vollständigen Übernahme der Anforderung

func main() {
    err := http.ListenAndServe(":8080", &Engine{})
    if err != nil {
        panic(err.Error())
    }}type Engine struct {}func (e *Engine) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path == "/hello" {
        w.Write([]byte("Hello"))
    }}
Definieren Sie ServerHTTP

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)}
Wenn wir ein HTTP-Server-Framework schreiben müssen, müssen wir diese Methode gleichzeitig implementieren. Die Eingabe- und Ausgabeströme von net/http sind nicht sehr groß Praktischerweise benötigen wir auch eine Verpackung sowie eine einfache Route.

Hier ist eine kurze Zusammenfassung.
  • Eine Engine, die ServeHTTP implementiert wird hier verwendet, um einen vollständigen Abgleich durchzuführen. Wir schreiben einen Test, um unseren HTTP-Server zu überprüfen das Problem, dass man vergisst, nach dem Nichtschreiben zurückzukehren. Fehler, die oft schwer zu erkennen sind.
  • Ein HTTP-Server benötigt auch eine Middleware-Funktion. Die Idee hier ist, ein Array von handleFunc in der Engine zu speichern, die externe Registrierung zu unterstützen, ein neues Ctx zu erstellen, wenn eine Anfrage eingeht, und das globale HandleFunc in der Engine in das Ctx zu kopieren , und verwenden Sie dann c.Next(), um Aufrufe im Matroschka-Stil zu implementieren.

    import (
        "net/http")type Engine struct {
        addr  string
        route map[string]handFunc}type Context struct {
        w      http.ResponseWriter
        r      *http.Request
        handle handFunc}type handFunc func(ctx *Context) errorfunc NewServer(addr string) *Engine {
        return &Engine{
            addr:  addr,
            route: make(map[string]handFunc),
        }}func (e *Engine) Run() {
        err := http.ListenAndServe(e.addr, e)
        if err != nil {
            panic(err)
        }}func (e *Engine) Get(path string, handle handFunc) {
        e.route[path] = handle}func (e *Engine) handle(writer http.ResponseWriter, request *http.Request, handle handFunc) {
        ctx := &Context{
            w:      writer,
            r:      request,
            handle: handle,
        }
        ctx.Next()}func (e *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {
        handleF := e.route[req.URL.Path]
        e.handle(w, req, handleF)}func (c *Context) Next() error {
        return c.handle(c)}func (c *Context) Write(s string) error {
        _, err := c.w.Write([]byte(s))
        return err}
    Die Implementierungsmethode ist sehr einfach. Hier überprüfen wir, ob sie Pre- und Post-Middleware unterstützen kann.
func TestHttp(t *testing.T) {
    app := NewServer(":8080")

    app.Get("/hello", func(ctx *Context) error {
        return ctx.Write("Hello")
    })

    app.Run()}
  • Mit nur 100 Codezeilen haben wir insgesamt einen einfachen HTTP-Server implementiert Gehen Sie zu den Folgedetails. Wenn Sie sich den Quellcode von Gin ansehen, liegt der Schwerpunkt auf der Route und der Implementierung des Präfixbaums.

  • Das obige ist der detaillierte Inhalt vonWie kann ich das Go Http Server-Framework schnell implementieren? In einem Artikel erledigt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen