从这一篇笔记,我来尝试根据学习的内容,逐步构建一个简单的web应用。
创建HTTP服务器和处理HTTP请求
HTTP服务器
在Golang中,我们可以使用net/http包来创建HTTP服务器。
package main
import (
"fmt"
"net/http")
func main() {
http.HandleFunc("/", myHandler)
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Received!")
}
在上面的代码中,我定义了一个名为myHandler的处理函数,并使用http.HandleFunc函数将其注册为处理根路径("/")的处理函数。然后使用http.ListenAndServe函数启动HTTP服务器并监听端口8080。当有HTTP请求到达时,myHandler函数将被调用,它将向客户端发送"Received"字符串。
Notice for panic,defer,recover: 不难看到这里使用了go中的异常抛出关键字"panic",一般来说Go的异常使用场景可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。
HTTP请求
在HTTP请求中,请求方法、请求URL、请求头和请求体是非常重要的组成部分。在Golang中,我们可以使用http.Request和http.Response类型来表示HTTP请求和响应。
package main
import (
"fmt"
"net/http")
func main() {
http.HandleFunc("/", myHandler)
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("Method:", r.Method)
fmt.Println("URL:", r.URL.String())
fmt.Println("Headers:")
for name, values := range r.Header {
for _, value := range values {
fmt.Printf("\t%s=%s\n", name, value)
}
}
}