You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中$request->input('name')在Go(net/http)中的等价实现

在Go的net/http中获取POST请求的name参数

根据Postman发送POST请求的不同格式,获取name参数的方式略有区别,以下是两种最常见场景的实现:

1. 表单格式(application/x-www-form-urlencoded)

这是Postman默认的表单提交类型,需要先解析表单数据再获取参数:

package main

import (
	"fmt"
	"net/http"
	"strings"
)

func main() {
	http.HandleFunc("/submit", func(w http.ResponseWriter, r *http.Request) {
		// 解析POST表单数据,必须调用此方法才能读取表单参数
		if err := r.ParseForm(); err != nil {
			http.Error(w, "表单解析失败", http.StatusBadRequest)
			return
		}

		// 从POST参数中获取name,r.PostForm只包含POST请求的参数
		name := r.PostForm.Get("name")
		// 也可以用r.Form.Get("name"),它会同时包含GET和POST的参数

		// 对name进行格式化操作(示例:去除首尾空格、首字母大写)
		formattedName := formatName(name)

		fmt.Fprintf(w, "原始name: %s\n格式化后name: %s", name, formattedName)
	})

	// 启动服务监听8080端口
	http.ListenAndServe(":8080", nil)
}

// formatName 自定义的name格式化函数
func formatName(name string) string {
	if name == "" {
		return ""
	}
	trimmed := strings.TrimSpace(name)
	// 首字母大写,其余保持原样
	return strings.ToUpper(string(trimmed[0])) + trimmed[1:]
}

2. JSON格式(application/json)

如果Postman发送的是JSON格式的请求,需要先读取请求体并解析为结构体或map:

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"strings"
)

// 定义结构体用于接收JSON参数,字段标签要和JSON键名对应
type RequestPayload struct {
	Name string `json:"name"`
}

func main() {
	http.HandleFunc("/submit-json", func(w http.ResponseWriter, r *http.Request) {
		var payload RequestPayload
		// 解析JSON请求体到结构体
		if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
			http.Error(w, "JSON解析失败", http.StatusBadRequest)
			return
		}
		defer r.Body.Close() // 记得关闭请求体

		// 直接从结构体中获取name参数
		name := payload.Name
		formattedName := formatName(name)

		fmt.Fprintf(w, "原始name: %s\n格式化后name: %s", name, formattedName)
	})

	http.ListenAndServe(":8080", nil)
}

func formatName(name string) string {
	if name == "" {
		return ""
	}
	trimmed := strings.TrimSpace(name)
	return strings.ToUpper(string(trimmed[0])) + trimmed[1:]
}

额外说明

  • 如果是multipart/form-data格式(比如带文件上传的表单),需要调用r.ParseMultipartForm(10<<20)(参数是允许的最大内存占用,单位字节),之后同样用r.Form.Get("name")获取参数。
  • r.Form.Get()返回的是字符串,如果参数不存在会返回空字符串;如果需要获取多值参数(比如同一个key有多个值),可以用r.Form["name"]得到字符串切片。

内容的提问来源于stack exchange,提问作者Vinotaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:50:31