提示:本系列文章适合对Go有持续冲动的读者
初探golang web服务
golang web开发是其一项重要且有竞争力的应用,本小结来看看再golang中怎么创建一个简单的web服务。
在不适用web框架的情况下,可以使用net/http
包搭建一个web服务。
- 这里我们使用
net/http
创建一个打印请求URL的web服务。
package main
import (
//"log"
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/",handler)
http.ListenAndServe("localhost:6677",nil)
}
func handler(w http.ResponseWriter,r *http.Request) {
fmt.Fprintf(w,"url.path=%q\n",r.URL.Path) //输出到文件流
}
http.HandleFunc
函数可以理解为URL路由。
http.ListenAndServe
是web服务的创建核心。
handler
是http请求处理函数,接受一个http.ResponseWriter
文件流 和http.Request
类型的对象。
[root@VM-0-5-centos ~]# curl localhost:6677/123
url.path="/123"
- 我们通过handler函数来对访问url做访问数计算。
引入golang sync
中的互斥锁,这样同时存在多个请求时只有一个goroutine改变count计数。互斥锁后续深入了解。
package main
import (
//"log"
"fmt"
"net/http"
"sync"
)
var count int
var mutex sync.Mutex //使用互斥锁
func main() {
http.HandleFunc("/",r *http.Request) {
mutex.Lock()
count++
mutex.Unlock()
fmt.Fprintf(w,"request url.path:%q has %d times\n",r.URL.Path,count)
}
我们来看看请求结果如下:
[root@VM-0-5-centos ~]# curl localhost:6677/golang
request url.path:"/golang" has 1 times
[root@VM-0-5-centos ~]# curl localhost:6677/golang
request url.path:"/golang" has 2 times
[root@VM-0-5-centos ~]# curl localhost:6677/golang
request url.path:"/golang" has 3 times
-
http.Request
类型对象除了URL.Path
属性外还有Method
、Proto
等。我们通过handler
函数分别打印出来。
package main
import (
//"log"
"fmt"
"net/http"
"sync"
)
var count int
var mutex sync.Mutex //使用互斥锁
func main() {
http.HandleFunc("/","%s,%s,\n",r.Method,r.URL,r.Proto)
fmt.Fprintf(w,"host:%q\nremoteaddr:%q\n",r.Host,r.RemoteAddr)
for k,v := range r.Header {
fmt.Fprintf(w,"Header[%q]:%q\n",k,v)
}
for k,v := range r.Form {
fmt.Fprintf(w,"Form[%q]:%q\n",v)
}
}
创建表单接受后输出如下:
//output
GET,/helloweb,HTTP/1.1,host:"localhost:6677"
remoteaddr:"127.0.0.1:58088"
Header["User-Agent"]:["curl/7.29.0"]
Header["Accept"]:["*/*"]
Form[parm1]:hello
Form[parm2]:web
本次简单的了解了一下golang web服务,也是初尝章节结束。接下来会比较深入的学习golang的精彩细节与精华。
文章有不足的地方欢迎在评论区指出。
欢迎收藏、点赞、提问。关注顶级饮水机管理员,除了管烧热水,有时还做点别的。
原文地址:https://www.cnblogs.com/qsing
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。