Alıştırma - Uygulama oluşturmak için özel işleyici kullanma
Bu alıştırmada Go kullanarak sunucusuz bir uygulama oluşturacak ve çalıştıracaksınız.
Uygulamayı iskeleye ekle
Visual Studio Code'daki Azure İşlevleri uzantısını kullanarak uygulamanın iskelesini yaparak başlayın.
- Komut Paleti>.
- Azure İşlevleri: Yeni Proje Oluştur'u seçin.
- Genellikle geçerli klasörünüz olan bir klasör seçin.
- Dil seçin bölümünde Özel İşleyici'yi seçin.
- İlk işleviniz için şablon seçin bölümünde HttpTrigger'ı seçin.
- Uygulamaya merhaba gibi bir ad verin.
- Anonim yetkilendirme düzeyini seçin. İsterseniz bunu daha sonra değiştirebilirsiniz.
Şimdi aşağıdakine benzer bir projeniz var:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Uygulamayı oluşturma
Sonraki adım serisi, BIR HTTP tetikleyicisine yanıt verebilen bir uygulama oluşturmaktır.
Proje kökünde server.go adlı bir dosya oluşturun.
server.go'ya aşağıdaki içeriği verin:
package main import ( "fmt" "io" "log" "net/http" "os" )Yukarıdaki kod, bir HTTP uygulaması oluşturmak ve ortam değişkenlerini aramak için ihtiyacınız olan tüm kitaplıkları içeri aktarır.
İçeri aktarma deyimlerinden sonra aşağıdaki kodu ekleyin:
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)) }main()İşlev tek başına çağrılır. Kodun ilk satırı, ortam değişkeninden nasıl okuduğunuFUNCTIONS_CUSTOM_HANDLER_PORTbelirtir:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")Ardından işlev bağlantı noktasının var olup olmadığını denetler. Aksi takdirde işleve 8080 numaralı bağlantı noktası atanır:
if !exists { customHandlerPort = "8080" }Sonraki kod bir HTTP sunucusu örneği oluşturur:
mux := http.NewServeMux()Son önem derecesi, belirli bir bağlantı noktasını dinlemeye başlayan ve istekleri almaya hazır olduğunu belirten ve yöntemiyle
ListenAndServe()gelen satırdır:log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))Şimdi kalan kodu ekleyelim. İlk olarak aşağıdaki satırı bulun ve açıklamayı kaldırın:
// mux.HandleFunc("/api/hello", helloHandler)import deyimleri ve işlevi arasında
main()aşağıdaki kodu ekleyin: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) } }İşlev,
helloHandler()içerik türünü olarakapplication/jsonayarlar. "Merhaba dünya" veya varsa gönderilen gövde ile yanıt verir.
Uygulamayı çalıştırma
Bu noktada kodu yazmayı bitirdiniz, ancak bu senaryonun çalışması için bazı yapılandırmalar yapmanız gerekir. İşlev konağı tarafından bulunabilmesi için yürütülebilir dosyanızın nerede olduğuna dikkat etmeniz gerekir. Ayrıca yönlendirmeyi ve bu uygulamanın HTTP tetikleyicileriyle uğraştığını ve başka bağlama türü olmadığını yapılandırmanız gerekir.
Terminalden proje kökünde komutunu çalıştırın
go build server.go:go build server.goBu adım, macOS ve Linux'ta sunucu olarak adlandırılan veya Windows işletim sisteminde server.exe yürütülebilir bir dosya oluşturur.
host.json dosyasını açın ve içindeki öğesini
defaultExecutablePathbuluncustomHandler. macOS ve Linux'ta veya./serverWindows işletim sisteminde belirtin.\\server.exe.öğesinin
customHandleraltına öğesini ekleyinenableForwardingHttpRequestve değerinitrueverin. ÖğenizcustomHandlerşimdi şöyle görünmelidir:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }Terminalden proje kökünde komutunu çalıştırın
func start. Bunu yaptığınızda İşlevler uygulamanız başlatılır.func startÇıkışın sonunda şuna benzer bir çıkış görürsünüz:
Functions: hello: [GET,POST] http://localhost:7071/api/helloTarayıcıda adresine
http://localhost:7071/api/hellogidin. "Merhaba dünya" çıkışını görmeniz gerekir.
Tebrikler! Go'da sunucusuz bir uygulama geliştirdiniz.