package main
import (
"fmt"
"log"
"net/http"
"strings"
)
func main() {
// the forward slash at the end is important for path parameters:
http.HandleFunc("/testendpoint/", testendpoint)
err := http.ListenAndServe(":8888", nil)
if err != nil {
log.Println("ListenAndServe: ", err)
}
}
func testendpoint(w http.ResponseWriter, r *http.Request) {
// If you want a good line of code to get both query or form parameters
// you can do the following:
param1 := r.FormValue("param1")
fmt.Fprintf( w, "Parameter1: %s ", param1)
//to get a path parameter using the standard library simply
param2 := strings.Split(r.URL.Path, "/")
// make sure you handle the lack of path parameters
if len(param2) > 4 {
fmt.Fprintf( w, " Parameter2: %s", param2[5])
}
}
您可以在此处的 aapi 操场上运行代码
将此添加到您的访问网址:/mypathparameeter?param1=myqueryparam
我现在想离开上面的链接,因为它为您提供了一个运行代码的好地方,而且我相信能够看到它的实际运行很有帮助,但是让我解释一些您可能需要 post 参数的典型情况.
开发人员有几种典型的方式将发布数据拉到后端服务器,通常在从请求中拉取文件或大量数据时会使用多部分表单数据,所以我看不出这有什么关系,至少在问题的背景下。他正在寻找帖子参数,这通常意味着表单帖子数据。通常表单发布参数以 Web 表单的形式发送到后端服务器。
当用户从 html 向 golang 提交登录表单或注册数据时,在这种情况下,来自客户端的 Content Type 标头通常是 application/x-www-form-urlencoded,我相信这就是问题所在,这些将是表单后参数,使用 r.FormValue("param1") 提取。
在从 post body 中获取 json 的情况下,您将获取整个 post body 并将原始 json 解组为一个结构,或者在从请求正文中提取数据后使用库来解析数据,Content Type 标头应用程序/json。
内容类型标头主要负责您将如何解析来自客户端的数据,我给出了 2 种不同内容类型的示例,但还有更多。