Heim > Backend-Entwicklung > Golang > 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

藏色散人
Freigeben: 2022-12-14 20:43:18
nach vorne
4908 Leute haben es durchsucht

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"))})
Nach dem Login kopieren

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"))
    }}
Nach dem Login kopieren
Definieren Sie ServerHTTP

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)}
Nach dem Login kopieren
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}
    Nach dem Login kopieren
    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()}
Nach dem Login kopieren
  • 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!

    Verwandte Etiketten:
    Quelle:learnku.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage