Golang Web应用-2 | 青训营笔记

79 阅读1分钟

从这一篇笔记,我来尝试根据学习的内容,逐步构建一个简单的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)  
      }  
   }  
}