Grundlegender HTTP-Server in Go

GolangGolangBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Labor zielt darauf ab, Ihre Fähigkeit zu testen, einen einfachen HTTP-Server mit dem Paket net/http in Golang zu schreiben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/NetworkingGroup(["Networking"]) go/NetworkingGroup -.-> go/http_server("HTTP Server") subgraph Lab Skills go/http_server -.-> lab-15482{{"Grundlegender HTTP-Server in Go"}} end

HTTP-Server

Sie müssen einen einfachen HTTP-Server schreiben, der zwei Routen verarbeiten kann: /hello und /headers. Die /hello-Route sollte eine einfache "hello"-Antwort zurückgeben, während die /headers-Route alle HTTP-Anfrageheader zurückgeben sollte.

  • Der Server sollte das Paket net/http verwenden.
  • Die /hello-Route sollte eine "hello"-Antwort zurückgeben.
  • Die /headers-Route sollte alle HTTP-Anfrageheader zurückgeben.
  • Der Server sollte auf Port 8090 lauschen.
## Führen Sie den Server im Hintergrund aus.
$ go run http-servers.go &

## Greifen Sie auf die `/hello`-Route zu.
$ curl localhost:8090/hello
hello

Hier ist der vollständige Code:

// Ein einfacher HTTP-Server lässt sich leicht mit dem
// Paket `net/http` schreiben.
package main

import (
	"fmt"
	"net/http"
)

// Ein grundlegendes Konzept bei `net/http`-Servern ist
// *Handler*. Ein Handler ist ein Objekt, das das
// `http.Handler`-Interface implementiert. Ein häufiger
// Weg, einen Handler zu schreiben, besteht darin, die
// `http.HandlerFunc`-Adapter auf Funktionen mit der
// passenden Signatur zu verwenden.
func hello(w http.ResponseWriter, req *http.Request) {

	// Als Handler dienende Funktionen erhalten einen
	// `http.ResponseWriter` und einen `http.Request` als
	// Argumente. Der Antwortschreiber wird verwendet, um
	// die HTTP-Antwort auszufüllen. Unsere einfache
	// Antwort ist hier einfach "hello\n".
	fmt.Fprintf(w, "hello\n")
}

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

	// Dieser Handler macht etwas etwas Komplexeres, indem
	// er alle HTTP-Anfrageheader liest und sie in den
	// Antwortkörper zurückgibt.
	for name, headers := range req.Header {
		for _, h := range headers {
			fmt.Fprintf(w, "%v: %v\n", name, h)
		}
	}
}

func main() {

	// Wir registrieren unsere Handler auf den Serverrouten
	// mit der Hilfsfunktion `http.HandleFunc`. Sie
	// konfiguriert den *Standardrouter* im Paket
	// `net/http` und nimmt eine Funktion als Argument.
	http.HandleFunc("/hello", hello)
	http.HandleFunc("/headers", headers)

	// Schließlich rufen wir `ListenAndServe` mit dem Port
	// und einem Handler auf. `nil` veranlasst es, den
	// Standardrouter zu verwenden, den wir gerade
	// eingerichtet haben.
	http.ListenAndServe(":8090", nil)
}

Zusammenfassung

In diesem Labor mussten Sie einen einfachen HTTP-Server schreiben, der zwei Routen verarbeiten kann: /hello und /headers. Sie haben gelernt, wie Sie das Paket net/http verwenden, um Handler für jede Route zu schreiben und sie auf dem Server zu registrieren. Schließlich haben Sie gelernt, wie Sie den Server starten und auf eingehende Anfragen lauschen.