Øvelse – brug en brugerdefineret handler til at bygge en app
I denne øvelse skal du oprette og køre en serveruafhængig app ved hjælp af Go.
Stillads til appen
Begynd med at oprette et stillads for appen ved hjælp af udvidelsen Azure Functions i Visual Studio Code.
- VælgVis>kommandopalet .
- Vælg Azure Functions: Opret nyt projekt.
- Vælg en mappe, som normalt er den aktuelle mappe.
- I Vælg et sprogskal du vælge Brugerdefineret handler.
- I Vælg en skabelon til din første funktionskal du vælge HttpTrigger.
- Giv appen et navn, f.eks. hej.
- Vælg et godkendelsesniveau for anonyme. Du kan ændre det senere, hvis du vil.
Nu har du et projekt, der ser nogenlunde sådan ud:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Opret appen
Den næste række trin handler om at oprette en app, der kan reagere på en HTTP-udløser.
Opret en fil med navnet server.go i projektroden.
Giv server.go følgende indhold:
package main import ( "fmt" "io" "log" "net/http" "os" )Den foregående kode importerer alle de biblioteker, du skal bruge for at bygge en HTTP-app og slå miljøvariabler op.
Tilføj følgende kode efter importsætningerne:
func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() // mux.HandleFunc("/api/hello", helloHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }Funktionen
main()aktiveres af sig selv. Den første linje i koden angiver, hvordan den læses fra miljøvariablenFUNCTIONS_CUSTOM_HANDLER_PORT:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")Derefter kontrollerer funktionen, om porten findes. Hvis ikke, tildeles funktionen port 8080:
if !exists { customHandlerPort = "8080" }Den næste kode instantierer en HTTP-serverforekomst:
mux := http.NewServeMux()Den sidste prioritetslinje er den, der begynder at lytte til en bestemt port, og signalerer, at den er klar til at modtage anmodninger, med metoden
ListenAndServe():log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))Lad os tilføje den resterende kode. Find først følgende linje og fjern kommentaren:
// mux.HandleFunc("/api/hello", helloHandler)Tilføj følgende kode mellem importsætningerne og funktionen
main():func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { w.Write([]byte("hello world")) } else { body, _ := io.ReadAll(r.Body) w.Write(body) } }Funktionen
helloHandler()angiver indholdstypen tilapplication/json. Det reagerer med enten "hej verden" eller den indsendte krop, hvis nogen.
Kør appen
Du er færdig med at oprette koden på nuværende tidspunkt, men du skal udføre en konfiguration, for at dette scenarie kan fungere. Du skal påpege, hvor din eksekverbare fil er, så funktionsværten kan finde den. Du skal også konfigurere den routing og tilstand, som denne app håndterer HTTP-udløsere og ingen andre typer bindinger.
Kør
go build server.goi projektroden fra en terminal:go build server.goDette trin opretter en eksekverbar fil, der kaldes server på macOS og Linux eller server.exe på et Windows OS.
Åbn host.json-filen, og find elementet
defaultExecutablePathi detcustomHandler. Angiv./serverpå macOS og Linux eller.\\server.exepå et Windows OS.Under elementet
customHandlerskal du tilføje elementetenableForwardingHttpRequestog give det værdientrue. DitcustomHandlerelement bør nu se sådan ud:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }Kør
func starti projektroden fra en terminal. Det starter appen Functions.func startI slutningen af outputtet kan du se et output, der ligner:
Functions: hello: [GET,POST] http://localhost:7071/api/helloGå til
http://localhost:7071/api/helloi en browser. Du bør se outputtet "hej verden."
Tillykke! Du har udviklet en serveruafhængig app i Go.