AI智能
改变未来

Go语言前后端传值方式解决方法(一)


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]

的方式来获取对应键的值

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Go语言前后端传值方式解决方法(一)