本文摘自php中文网,作者coldplay.xixi,侵删。

golang如何做一个服务器?
golang做一个服务器的方法:
我们知道,golang中的net/http包对网络的支持非常好,这样会让我们比较容易的建立起一个相对简单的服务器,我们来看一段代码
1 2 3 4 5 6 7 | func sayHi(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hi" )
}
func main() {
http.HandleFunc( "/sayHi" , sayHi)
log.Fatal(http.ListenAndServe( "localhost:8080" , nil))
}
|
这里就建立起了一个比较简单的服务器,这个是什么意思呢?现在先大概的说一下,这里监听了一个我们本机的端口,然后接受客户端的请求,再响应给客户端相应的数据。
我们再来看一段代码
1 2 3 4 5 6 7 8 | func sayHi(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hi" )
}
func main() {
serveMux := http.DefaultServeMux
serveMux.HandleFunc( "/sayHi" , sayHi)
log.Fatal(http.ListenAndServe( "localhost:8080" , serveMux))
}
|
这两段代码作用是一样的,只是在写法上面有点区别,我们来分析一下这些Handler,HandlerFunc,DefaultServeMux 都是干什么用的。
第一段代码中,HandleFunc这个函数的作用我们看看源码。
1 2 3 | func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
|
在源码中,调用这个函数,又会在其中调用一个方法。
1 2 3 | func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
mux.Handle(pattern, HandlerFunc(handler))
}
|
这个方法是定义在ServeMux结构体上的,那么这个ServeMux具体又是干什么的?现在先不用管,我们跟着源码往下看,这里调用了一个定义在ServeMux结构体上的Handle方法,我们来看看这个方法具体又有什么作用。
阅读剩余部分
相关阅读 >>
手撸golang 仿spring ioc/aop 之8 扫码3
手撸golang 仿spring ioc/aop 之7 扫码2
go cassandra 示例 1
手撸golang go与微服务 chatserver之1
go语言入门:第一个 go 程序
同样都是使用接口,java和go差距咋就这么大呢?
使用 google/wire 对 go 项目进行依赖注入
golang 四则运算 计算器 yacc 归约
golang 实现 rsa 的加密解密
json序列化在golang中的应用
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang如何做一个服务器?