GO Web编程HTTP初探 | 青训营

89 阅读3分钟

GO WEB编程

路由器的定义

在Web开发中,路由器就是负责接收传入的 HTTP请求,并且将这个请求映射到合适的处理函数的组建。这样的路由器常常被集成到Web服务器中。

说的简单一些,就是会根据 http 请求的 url 路径 ,去找到相对应的函数来调用

比如我们路由器监听"/"这个根目录 url ,然后绑定了handle这个函数。一旦路由器接收到了任何 url ,都会调用 handle 这个函数。

根本就是说,路由将url请求和函数响应绑定在了一起。

最后呢说说好处,路由器的这个机制使得你可以根据不同的 URL 路径和 HTTP 方法来分发请求到不同的处理逻辑,从而实现不同页面、API 端点等的响应。这种模式使得 Web 应用程序的开发更加模块化和易于维护。

例子:一个简单路由

func main(){
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
		w.Write([]byte("Hello World!"))
	})
	http.ListenAndServe("localhost:8080", nil)
}

函数体第一行代码将 url 和响应函数绑定,响应函数的功能是写"Hello World!" , 然后第二行的作用是开启这个路由器,并且端口是8080

对接口的理解

定义: 在 Go 中,接口(interface)是一种类型,它定义了一组方法的签名,而不关心这些方法是如何实现的。 使用: 在 Go 中,接口的方法签名包括方法的名称、参数列表和返回值类型。如果你想要一个类型实现某个接口,那么这个类型的方法必须与接口中定义的方法具有相同的方法签名,包括参数列表和返回值类型。 所以,我们只要实现了这个接口的函数,就认为是这个接口的类型。可以用这个接口来访问我们的自定义类型。 理解: 对接口的定义好比我们需要对做菜这个行为做出定义。需要将几样菜拿过来,产出成菜。

参数(原材料): 这是接口方法的输入,就像做菜时需要原材料。在接口中,参数列表定义了方法需要的输入参数。

接口(具体实现): 接口定义了一组方法签名,就像菜谱定义了一系列步骤。不同的类型可以根据接口的定义来实现相应的方法,就像不同的厨师可以根据菜谱来制作不同的菜肴。

返回值(最终成菜): 这是接口方法的输出,就像做菜后获得的最终成品。在接口中,返回值类型定义了方法的输出结果。

在这个比喻中,强调了关注点在于能否完成工作,而不必关心具体的实现细节。这就是接口的一大优势:可以通过关注于方法签名和预期的功能,将不同的类型统一起来,以满足特定的需求。

handler自定义函数的实现

为了实现http.Handler接口,我们需要实现这个方法ServeHTTP。如果函数实现了这个方法,就会被认为实现了接口,在路由handle函数方法调用时可以使用这个函数。 具体实现:

  type 自定义函数结构体 struct{}
  func (m *自定义函数结构体) ServeHTTP(w http.ResponseWriter, r *http.Request){
    给w做响应操作
  }
  func main(){
    x := &自定义函数结构体
    http.Handle("路径url", &x)
    //服务器配置
    server := http.Server{
      Addr: "localhost:8080",
      Handler: nil,
    }
    //服务器启动
    server.ListenAndServe()
  }