Golang系列文章:创建Web服务
使用Go语言,我们可以轻松创建出Web服务,这一点比Node.js还要简单,今天就来总结一下Go语言中Web服务的创建方式。 首先,我们需要引入 // server.go package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/",handler) log.Println("go server listening at port 3000...") err := http.ListenAndServe(":3000",nil) if err != nil { log.Fatal("err: ",err) } } func handler(res http.ResponseWriter,req *http.Request) { log.Println(req.URL.Path) fmt.Fprintf(res,"URL.Path = %qn",req.URL.Path) } 上面代码中,我们会处理所有 $ go run server.go 2018/08/30 13:26:58 go server listening at port 3000... 2018/08/30 13:27:01 / 2018/08/30 13:27:07 /test 接下来,我们希望这个服务能够解析出浏览器的请求信息,返回并显示到页面,下面是经过改进后的代码: // server.go package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/",req *http.Request) { // 请求方法 请求地址 协议类型 fmt.Fprintf(res,"%s %s %sn",req.Method,req.URL,req.Proto) // 请求头信息 for k,v := range req.Header { fmt.Fprintf(res,"Header[%q] = %qn",k,v) } // 请求的服务器URL & 请求的远程地址 fmt.Fprintf(res,"Host = %qn",req.Host) fmt.Fprintf(res,"RemoteAddr = %qn",req.RemoteAddr) if err := req.ParseForm(); err != nil { log.Print(err) } // 表单信息 for k,v := range req.Form { fmt.Fprintf(res,"Form[%q] = %qn",v) } } 在 接下来,我们希望做个小功能 - 统计用户的访问次数,这是一项很古老的技术了,在上个世纪的论坛网站中曾广泛应用。:) 我们改进后的代码如下: // server.go package main import ( "fmt" "log" "sync" "net/http" ) var mutex sync.Mutex var count int func main() { http.HandleFunc("/",handler) // 添加/count路由及处理函数 http.HandleFunc("/count",counter) log.Println("go server listening at port 3000...") err := http.ListenAndServe(":3000",err) } } // 每次访问时 count递增 func handler(res http.ResponseWriter,req *http.Request) { mutex.Lock() count++ mutex.Unlock() fmt.Fprintf(res,req.URL.Path) } // 显示当前访问次数 func counter(res http.ResponseWriter,req *http.Request) { mutex.Lock() fmt.Fprintf(res,"Visit Count: %dn",count) mutex.Unlock() } 这次我们引入了 运行上面的代码,然后在浏览器中访问除 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |