Golang学习之net/http包
使用net/http包快速创建一个HTTP服务器。 // file http_test1.go
package main
import (
"fmt"
"net/http"
"log"
)
func HandleIndex(w http.ResponseWriter,r *http.Request) {
r.ParseForm()
fmt.Println("PATH: ",r.URL.Path)
fmt.Println("SCHEME: ",r.URL.Scheme)
fmt.Println("METHOD: ",r.Method)
fmt.Println()
fmt.Fprintf(w,"<h1>Index Page</h1>")
}
func main() {
http.HandleFunc("/",HandleIndex)
err := http.ListenAndServe(":8000",nil)
if err != nil {
log.Fatal("ERROR: ",err)
}
}
其实有时候语言无关紧要,原理大抵相同。此handler就如同Python的WSGI协议 $ go run http_test1.go
在浏览器中输入127.0.0.1:8000可以看到浏览器显示: 在终端上打印出如下信息: 虽然我们没有像其他语言一样显式地监听端口,启动服务器,或者用socket来搭建tcp或udp服务器,用while循环来获取请求数据。但是我们不难发现服务的入口在 $ godoc -src net/http ListenAndServe
会打印出来两个相似的函数: func (srv *Server) ListenAndServe() error {
addr := srv.Addr
if addr == "" {
addr = ":http"
}
ln,err := net.Listen("tcp",addr)
if err != nil {
return err
}
return srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})
}
func ListenAndServe(addr string,handler Handler) error {
server := &Server{Addr: addr,Handler: handler}
return server.ListenAndServe()
}
不要觉得这两个同名的函数像C++或Java一样是重载函数,Go语言中是没有函数签名这个概念的。 第一个函数 而第二个函数 转自:http://www.52php.cn/article/p-reusqfyy-bcg.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |