Ö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.
Autogenerera 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/ioutil" "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 denFUNCTIONS_CUSTOM_HANDLER_PORT
ska läsas 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. Först lokaliserar du följande rad och avkommentarer den:
// 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, _ := ioutil.ReadAll(r.Body) w.Write(body) } }
Funktionen
helloHandler()
anger innehållstypen tillapplication/json
. Den svarar med antingen "hello world" eller den publicerade brödtexten, om någon.
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 den körbara filen finns, så att funktionsvärden kan hitta den. Du måste också konfigurera routning och tillstånd som den här appen hanterar MED HTTP-utlösare och inga andra typer av bindningar.
Kör i projektroten från en terminal
go build server.go
: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
defaultExecutablePath
i dencustomHandler
. Ange./server
i macOS och Linux eller.\server.exe
i ett Windows-operativsystem.Under elementet
customHandler
lägger du till elementetenableForwardingHttpRequest
och ger det värdettrue
. ElementetcustomHandler
bör nu se ut så här:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
Kör i projektroten från en terminal
func start
. När du gör det startas din Functions-app.func start
I slutet av utdata ser du utdata 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 utdatan "hello world".
Grattis! Du har utvecklat en serverlös app i Go.