Go语言实现http

https://www.cnblogs.com/MikeZhang/archive/2012/08/10/httpShareGolang20120809.html



一个简单的http服务器代码 

package main
import (
        "io"
        "net/http"
        "log"
)
func HelloServer(w http.ResponseWriter, req *http.Request) {
        io.WriteString(w, "hello, world!\n")
}
func main() {
        http.HandleFunc("/hello", HelloServer)
        err := http.ListenAndServe(":12345", nil)
        if err != nil {
                log.Fatal("ListenAndServe: ", err)
        }
} 

这里调用的是 http.HandleFunc函数,这个函数声明如下: 

func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) 

这里用HelloServer实现HandleFunc函数的第二个参数。 

一个简单的http服务器计数器程序代码 

package main
import (
        "fmt"
        "net/http"
        "log"
)
type Counter struct {
        n int
}
func (ctr *Counter) ServeHTTP(c http.ResponseWriter, req *http.Request) {
      ctr.n++
      fmt.Fprintf(c, "counter = %d\n", ctr.n)
}
func main() {
        http.Handle("/counter", new(Counter))
        log.Fatal("ListenAndServe: ", http.ListenAndServe(":12345", nil))
} 

这里调用的是http.Handle函数,这个函数声明如下: 

func Handle(pattern string, handler Handler) 

说明:几乎任何东西都可加以方法,几乎任何东西都可满足某界面,http包定义的Handler界面就是这样,任何物件实现了Handler都可服务 HTTP请求。 

type Handler interface { 

ServeHTTP(ResponseWriter, *Request) 

} 

ResponseWriter 本身是个界面,它提供一些可访问的方法来返回客户的请求。这些方法包括标准的 Write 方法。因此 http.ResponseWriter 可用在io.Writer 可以使用的地方。Request 是个结构,包含客户请求的一个解析过的表示。 

所以这里只要给 Counter实现ServeHTTP方法就可以服务HTTP请求了。 

上面的两个例子是http服务器的两种方式,写出来主要是为了对比下。 

两种方式都实现了类似这样的函数: handler func(ResponseWriter, *Request),但是第一个例子的函数名字不固定,可以随便起,第二个例子中的函数名字只能是ServeHTTP,其它的不行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值