Go语言浏览器前端与服务端数据通信(一)
介绍关于Go语言前后端的数据交互,包括表单数据,JSON数据,Param参数
- JSON数据交互
- 表单数据交互
- Param数据提取
1.JSON数据传输
前端采用Postman进行模拟数据传输
准备数据如下
Go后台代码
package mainimport (\"fmt\"\"log\"\"net/http\"\"os\")func main() {http.HandleFunc(\"/test\", testHandler)//选择对应URL所处理的函数port := os.Getenv(\"PORT\")if port == \"\" {port = \"8080\"log.Printf(\"Defaulting to port %s\", port)}log.Printf(\"Listening on port %s\", port)log.Printf(\"Open http://localhost:%s in the browser\", port)log.Fatal(http.ListenAndServe(fmt.Sprintf(\":%s\", port), nil))}//处理函数func testHandler(w http.ResponseWriter, r *http.Request) {if r.Method == \"POST\" {//监听是否为POST方法b, err := ioutil.ReadAll(r.Body)//读取r中body的所有数据fmt.Print(string(b))//控制台打印数据if err != nil {log.Println(\"Data failed:\", err)}}//读取传递过来的json数据
控制台输出为
不难发现传输的数据都在r *http.Request这个对象中,使用Go语言的IO流中的ioutil即可读取r中的数据,json数据是存在body中的,所以读取body,但是最后读取的是二级制编码,需要调用string转换为字符串才能显示
2表单数据提取
Postman模拟表单数据提交
后台代码
if r.Method == \"POST\" {_ = r.ParseForm()fmt.Println(\"name:\", r.Form[\"name\"])for k, v := range r.Form {fmt.Println(\"key:\", k)// join() 方法用于把数组中的所有元素放入一个字符串。// 元素是通过指定的分隔符进行分隔的fmt.Println(\"val:\", strings.Join(v, \"\"))}}
为什么在提取值的时候需要使用string.Join,调试发现
k是字符串,v是一个string数组,故需要进行处理,最后结果为
3.Param数据提取
Postman模拟数据
后台处理
if r.Method == \"POST\" {data:=r.URL.Query()//获取URL中的Param数据for k, _ := range data{//data是一个二维数组,k为对应的键fmt.Println(k)fmt.Println(data[k][0])//值都存在第一个,所以都为0}}
最后返回data的结构为
故采取
data[k][0]
的方式获取数据,准确的来说,不采用循环代码会变成
data[\"name\"][0]
的方式来获取对应键的值