Gyakorlat – Alkalmazás létrehozása egyéni kezelővel
Ebben a gyakorlatban egy kiszolgáló nélküli alkalmazást fog létrehozni és futtatni a Go használatával.
Az alkalmazás felépítése
Első lépésként bontsa ki az alkalmazást a Visual Studio Code Azure Functions-bővítményével.
- Válassza a Megtekintés>Parancskatalógus lehetőséget.
- Válassza az Azure Functions: Új projekt létrehozása lehetőséget.
- Jelöljön ki egy mappát, általában az aktuális mappát.
- A Nyelv kiválasztása területen válassza az Egyéni kezelő lehetőséget.
- Az első függvény sablonjának kiválasztása területen válassza a HttpTrigger lehetőséget.
- Adjon nevet az alkalmazásnak, például hello.
- Válassza ki a névtelen engedélyezési szintet. Ezt később módosíthatja, ha szeretné.
Most már van egy projektje, amely így néz ki:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Az alkalmazás létrehozása
A következő lépéssorozat egy HTTP-eseményindítóra reagáló alkalmazás létrehozása.
Hozzon létre egy server.go nevű fájlt a projekt gyökérkönyvtárában.
Adja meg a server.go fájlnak a következő tartalmat:
package main import ( "fmt" "io" "log" "net/http" "os" )Az előző kód importálja a HTTP-alkalmazás létrehozásához és a környezeti változók kereséséhez szükséges kódtárakat.
Adja hozzá a következő kódot az importálási utasítások után:
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)) }A
main()függvény meghívása önmagában történik. A kód első sora bemutatja, hogyan olvas be aFUNCTIONS_CUSTOM_HANDLER_PORTkörnyezeti változóból:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")Ezután a függvény ellenőrzi, hogy létezik-e a port. Ha nem, akkor a függvény a 8080-ás porthoz van rendelve:
if !exists { customHandlerPort = "8080" }A következő kód létrehoz egy HTTP-kiszolgálópéldányt:
mux := http.NewServeMux()Az utolsó fontossági sor az, amely elkezd figyelni egy adott portot, és jelzi, hogy készen áll a kérések fogadására a következő módszerrel
ListenAndServe():log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))Adja hozzá a fennmaradó kódot. Először keresse meg a következő sort, és bontsa ki:
// mux.HandleFunc("/api/hello", helloHandler)Az importálási utasítások és a
main()függvény között adja hozzá a következő kódot: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) } }A
helloHandler()függvény a tartalomtípust a következőreapplication/jsonállítja: . A válasz vagy "hello world", vagy a küldött szöveg, ha van.
Az alkalmazás futtatása
Ezen a ponton végzett a kód szerkesztésével, de ehhez konfigurálnia kell a forgatókönyvet. Meg kell adnia, hogy hol található a végrehajtható fájl, hogy a funkciókiszolgáló megtalálja. Konfigurálnia kell azt az útválasztást és állapotot is, amely szerint az alkalmazás HTTP-eseményindítókkal foglalkozik, és nincs más típusú kötés.
Egy terminálból futtassa
go build server.goa projekt gyökerében:go build server.goEz a lépés létrehoz egy végrehajtható fájlt, amelyet macOS-en és Linuxon kiszolgálónak hívnak, vagy windowsos operációs rendszeren server.exe.
Nyissa meg a host.json fájlt, és keresse meg az
defaultExecutablePathelemet acustomHandlerfájlban. Adja meg./servermacOS és Linux rendszeren vagy.\\server.exeWindows operációs rendszeren.customHandlerAz elem alatt adja hozzá azenableForwardingHttpRequestelemet, és adja meg az értékettrue. AzcustomHandlerelemnek így kell kinéznie:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }A projekt gyökerében lévő terminálból futtassa a következőt:
func start. Ezzel elindítja a Functions-alkalmazást.func startA kimenet végén a következőhöz hasonló kimenet jelenik meg:
Functions: hello: [GET,POST] http://localhost:7071/api/helloBöngészőben nyissa meg a
http://localhost:7071/api/hello. A "hello world" kimenetnek kell megjelennie.
Gratulálunk! Kifejlesztett egy kiszolgáló nélküli alkalmazást a Go-ban.