Övning – Använda en anpassad hanterare för att skapa en app
I den här övningen ska du skapa och köra en serverlös app med hjälp av Go.
Skapa en stomme för appen
Börja med att skapa en app med hjälp av Azure Functions-tillägget i Visual Studio Code.
- Välj Visa>kommandopalett.
- Välj Azure Functions: Skapa nytt projekt.
- Välj en mapp, vanligtvis din aktuella mapp.
- I Välj ett språk väljer du Anpassad hanterare.
- I Välj en mall för din första funktion väljer du HttpTrigger.
- Ge appen ett namn, till exempel hello.
- Välj en auktoriseringsnivå för anonym. Du kan ändra det senare om du vill.
Nu har du ett projekt som ser ut ungefär så här:
hello/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Skapa appen
Nästa serie steg handlar om att skapa en app som kan svara på en HTTP-utlösare.
- Skapa en fil med namnet server.go i projektroten. 
- Ge server.go följande innehåll: - package main import ( "fmt" "io" "log" "net/http" "os" )- Föregående kod importerar alla bibliotek som du behöver för att skapa en HTTP-app och söka efter miljövariabler. 
- Lägg till följande kod efter importinstruktionerna: - 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()anropas av sig själv. Den första raden i koden anger hur den- FUNCTIONS_CUSTOM_HANDLER_PORTläser från miljövariabeln:- customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")- Sedan kontrollerar funktionen om porten finns. Annars tilldelas funktionen port 8080: - if !exists { customHandlerPort = "8080" }- Nästa kod instansierar en HTTP-serverinstans: - mux := http.NewServeMux()- Den sista prioritetsraden är den som börjar lyssna på en specifik port och signalerar att den är redo att ta emot begäranden med metoden - ListenAndServe():- log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
- Nu ska vi lägga till den återstående koden. Leta först upp följande rad och ta bort kommentaren: - // mux.HandleFunc("/api/hello", helloHandler)
- Mellan importinstruktionerna - main()och funktionen lägger du till följande kod:- 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()anger innehållstypen till- application/json. Den svarar med antingen "hello world" eller det skickade innehållet, om något.
Kör appen
Du är klar med att redigera koden just nu, men du måste göra en konfiguration för att det här scenariot ska fungera. Du måste peka på var din körbara fil finns, så att funktionsvärden kan hitta den. Du måste också konfigurera routning och ange att den här appen hanterar med HTTP-utlösare och inga andra typer av bindningar.
- I en terminal, kör - go build server.goi projektroten.- go build server.go- Det här steget skapar en körbar fil som kallas server på macOS och Linux, eller server.exe på ett Windows-operativsystem. 
- Öppna filen host.json och leta reda på elementet - defaultExecutablePathinuti- customHandler-elementet. Ange- ./serveri macOS och Linux eller- .\\server.exei ett Windows-operativsystem.
- Under elementet - customHandlerlägger du till elementet- enableForwardingHttpRequestoch ger det värdet- true. Elementet- customHandlerbör nu se ut så här:- "customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
- Kör - func startfrån en terminal i projektroten. När du gör det startas din Functions-app.- func start- I slutet av resultaten ser du data som liknar: - Functions: hello: [GET,POST] http://localhost:7071/api/hello
- I en webbläsare går du till - http://localhost:7071/api/hello. Du bör se resultatet "hej världen".
Grattis! Du har utvecklat en serverlös app i Go.