练习 - 使用自定义处理程序构建应用
在本练习中,你将通过使用“Go”构建和运行无服务器应用。
构架应用
通过构架应用开始,方法是使用 Visual Studio Code 中的 Azure Functions 扩展。
- 选择“查看”>“命令面板” 。
- 选择“Azure Functions:创建新项目”。
- 选择一个文件夹,通常选择的是你的当前文件夹。
- 在“选择语言”中,选择“自定义处理程序”。
- 在“为第一个函数选择模板”中,选择“HttpTrigger”。
- 为应用命名,如“hello”。
- 选择“匿名”的授权级别。 以后可以根据需要对其进行更改。
你的项目现如下所示:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
创建应用
接下来的一系列步骤是创建可响应 HTTP 触发器的应用。
在项目根目录下创建一个名为“server.go”的文件。
为“server.go”提供以下内容:
package main import ( "fmt" "io/ioutil" "log" "net/http" "os" )
前面的代码将导入生成 HTTP 应用和查找环境变量所需的所有库。
在导入语句后面添加以下代码:
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()
函数由自身调用。 代码的第一行指出了它将如何从FUNCTIONS_CUSTOM_HANDLER_PORT
环境变量读取:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
接下来,该函数会检查端口是否存在。 如果不存在,则为该函数分配端口 8080:
if !exists { customHandlerPort = "8080" }
下一个代码会实例化 HTTP 服务器实例:
mux := http.NewServeMux()
最后一行的重要性在于使用方法
ListenAndServe()
开始侦听特定端口并标志已准备好接收请求:log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
让我们添加剩下的代码。 首先,本地化以下行并取消注释:
// mux.HandleFunc("/api/hello", helloHandler)
在导入语句和
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, _ := ioutil.ReadAll(r.Body) w.Write(body) } }
helloHandler()
函数将内容类型设置为application/json
。 它响应的是“hello world”或发布的正文(如果有)。
运行应用
此时,你已完成代码编写,但需要进行一些配置才能使此方案正常运行。 需要指出可执行文件的位置,以便 Function 主机可以找到它。 还需要配置路由并说明此应用处理 HTTP 触发器而不是其他类型的绑定。
在终端中,在项目根目录下运行
go build server.go
:go build server.go
此步骤会创建一个在 macOS 和 Linux 上称为“server”,或在 Windows OS 上称为“server.exe”的可执行文件。
打开“host.json”,然后在
defaultExecutablePath
文件中找到customHandler
元素。 在 macOS 和 Linux 上指定./server
,或在 Windows OS 上指定.\server.exe
。在
customHandler
元素下,添加enableForwardingHttpRequest
元素并赋予其值true
。customHandler
元素现在应如下所示:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
在终端中,在项目根目录下运行
func start
。 这样做将启动 Functions 应用。func start
在输出的末尾,你将看到类似于以下内容的输出:
Functions: hello: [GET,POST] http://localhost:7071/api/hello
在浏览器中转到
http://localhost:7071/api/hello
。 你应会看到输出:“hello world”。
祝贺你! 你已使用 Go 开发出无服务器应用。