大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
Go标准库中的net/http提供了http服务器的方法。
从写一个最基本的HTTP服务器示例开始学习。
代码解析:
3行:import "net/http",导入net/http包
14行:http.HandleFunc("/", HelloWorld)中,使用HandleFunc方法创建路由“/”,第二个参数是指定处理发送到路径“/”请求的相应函数
7行:func HelloWorld(w http.ResponseWriter, r *http.Request) {},定义了HelloWorld函数,接受http.ResponseWriter和*http.Request请求指针,这样就可以在这个函数中,*http.Request查看、操作请求,之后将http.ResponseWriter相应给浏览器。
8行:w.Write([]byte("hello golang web")),使用w的Write方法相应,生成的HTTP响应含有响应体、报头和状态(比如200,404等),[]byte("hello golang web")表示将字符串转成字节。
15行:http.ListenAndServe(":8080", nil),是为了响应客户端,用ListenAndServe启动服务器,同时监听localhost和端口8000
在浏览器中输入http://127.0.0.1:8080/,显示获取到的结果。
其他工具:
在做web开发的过程中,习惯用postman工具来做测试。
路由响应:
http.HandleFunc("/", HelloWorld),注册url地址并设置响应的函数,需要注意的是HelloWorld是作为参数传递的,而不是调用,因此不用加括号()。
注册路由的时候,是什么就在URL里写什么,必须要完整匹配,也就是说如果注册了/users/,那么URL写成/users,就不行。
响应函数
路由器将路由映射到响应函数,响应函数可以读写报头、查看请求类型、分析请求数据、验证身份、查看请求类型。
下面是一个修改了报头的相应的演示。
6行:w.Header().Set("from","toutiao GoPy"),设置了响应头
7行:首先设置响应头,然后设置返回值,这样是可以行得通,但是如果先设置了返回值,那么设置的响应头就是没有用的。
在浏览器中输入URL,打开“开发者工具”,可以看到响应头中有对应的值From: toutiao GoPy
设置报头
返回json格式
w.Header().Set("Content-Type", "application/json; charset=utf-8"),通过设置Content-Type返回json格式的内容。
设置响应的报头,不仅可以创建,也可以读取、更新和删除操作。
响应不停类型内容
常见的内容类型包括text/plain、text/html、application/json和application/xml类型。
通过简单修改,输出的是文本类型的内容。
获取GET请求数据
10行:w.Header().Set("Content-Type","application/json")。设置响应头的内容类型为json格式。
11行:var map1 = map[string]interface{}{}。定义一个map,key是string,value是interface类型
12行:for k, v := range r.URL.Query()。通过循环r.URL.Query获取get的数据,k是键,v是值,v是string类型的切片。
16行:marshal, _ := json.Marshal(map1)。json.Marshal将map转换为json的字节集类型
17行:w.Write([]byte(string(marshal)))。用w的Write方法输出json格式的内容。
获取POST请求数据