zoukankan      html  css  js  c++  java
  • Go语言http包简易入门

    说道go语言web编程,必不可少的会使用到net/http包。go语言将web开发需要使用到的很多内容都放在了标准库中——net/http。

    如何写一个简单的web程序很容易。如下:

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "net/http"
     6 )
     7 
     8 func hello(w http.ResponseWriter, r *http.Request) {
     9     fmt.Fprintf(w, "hello")
    10 }
    11 
    12 func main() {
    13     server := &http.Server{
    14         Addr: "0.0.0.0:8080",
    15     }
    16     http.HandleFunc("/hello", hello)
    17     server.ListenAndServe()
    18 }

    其中使用了http包。使用http.HandleFunc就是使用了一个处理器函数。
    处理器函数是一个签名和ServeHTTP方法相同的函数,Go语言中,有一种HandlerFunc函数类型,可以加将这个函数转化为带有方法的处理器(Handler)?

    ServerMux是一个路由管理器,也可以说是一个多路复用器,使用方式如下:

     1 package main
     2 import (
     3     "fmt"
     4     "net/http"
     5 )
     6 func main() {
     7     servermux := http.NewServeMux()
     8     servermux.HandleFunc("/hello", hello)
     9     server := &http.Server{
    10         Addr: ":8080",
    11         Handler: servermux,
    12     }
    13     server.ListenAndServe()
    14 }
    15 func hello(w http.ResponseWriter, r *http.Request) {
    16     fmt.Fprintln(w, "hello world")
    17 }

    其实是在使用http.HandleFunc的时候,调用了

    1 func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
    2     DefaultServeMux.HandleFunc(pattern, handler)
    3 }

    这样的话,其实是使用了一个变量DefaultServeMux,再看看这个变量的内容:

    1 var DefaultServeMux = &defaultServeMux
    2 var defaultServeMux ServeMux

    这个变量其实就是ServeMux的实例。也就是ServeMux,所以在使用http的handerfunc的时候,是使用了这个多路复用器的。这个处理器也是默认的处理器。如果没有声明或者直接使用其他的处理器的时候,调用处理器函数和处理器都是使用了这个。

    接下来看HandleFunc这个函数,以上使用的http包的函数HandleFunc最终调用的是ServeMux的HandleFunc。所以在使用的时候Handle和HandleFunc完全一致。

    type HandlerFunc func(ResponseWriter, *Request)

    HandleFunc最终会将函数转成HandleFunc,等同于Handler,Handler是一个接口,如下:

    1 type Handler interface {
    2     ServeHTTP(ResponseWriter, *Request)
    3 }

    所以其实这两种类型是等价的。

  • 相关阅读:
    linux下使用tar命令
    ContentType和@ResponseBody
    ActiveMQ两种模式PTP和PUB/SUB<转>
    Postgresql分表与优化
    PostgreSQL存储过程<转>
    PostgreSQL Table Partitioning<转>
    Postgresql查询表的大小
    Postgresql添加/删除触发器示例
    Android TextView 支持的HTML标签
    我只是一直很努力
  • 原文地址:https://www.cnblogs.com/Summer7C/p/10703601.html
Copyright © 2011-2022 走看看