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

Go语言如何通过Postman传递time.Weekday参数并存储至数据库

解决Go中自定义Weekday类型的表单参数绑定问题

这个错误的核心原因很明确:HTTP表单传递的参数都是字符串类型,而你的Weekday是自定义的整数枚举类型,直接赋值肯定会出现类型不匹配。下面给你两种实用的解决方案,同时告诉你Postman的具体传参方式:

方案1:直接传递数字值(最简单高效)

因为你的Weekday是基于iota定义的,对应关系是:

  • Sunday = 0
  • Monday = 1
  • Tuesday = 2
  • ...
  • Saturday = 6

Postman传参步骤:

  1. 选择POST请求,URL填/schedule
  2. 切换到Body标签,选择form-data格式
  3. 添加一个参数:
    • Key: day
    • Value: 填对应星期的数字(比如1代表周一)

代码处理逻辑:

把表单获取到的字符串转成整数,再强转为你的Weekday类型,同时做合法性校验:

import "strconv"

func SaveData(c *gin.Context) {
    var schedule Schedule
    
    dayStr := c.PostForm("day")
    dayInt, err := strconv.Atoi(dayStr)
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "day必须是有效的数字"})
        return
    }
    // 校验数字范围是否在0-6之间
    if dayInt < 0 || dayInt > 6 {
        c.JSON(http.StatusBadRequest, gin.H{"error": "day的取值范围是0-6"})
        return
    }
    // 赋值给自定义Weekday类型
    schedule.Day = Weekday(dayInt)
    
    // 后续的数据库存储逻辑...
}

方案2:传递星期字符串(更直观友好)

如果不想让调用者记数字,可以传递"Monday"、"Tuesday"这类字符串,通过映射表转换为对应的枚举值。

Postman传参步骤:

和方案1一样用form-data,只是day的Value填星期的英文名称(比如"Monday",大小写可以兼容):

  • Key: day
  • Value: Monday(或monday、MONDAY)

代码处理逻辑:

先定义字符串到Weekday的映射表,再做转换:

import "strings"

// 定义字符串到自定义Weekday的映射
var weekdayMap = map[string]Weekday{
    "Sunday":    Sunday,
    "Monday":    Monday,
    "Tuesday":   Tuesday,
    "Wednesday": Wednesday,
    "Thursday":  Thursday,
    "Friday":    Friday,
    "Saturday":  Saturday,
}

func SaveData(c *gin.Context) {
    var schedule Schedule
    
    dayStr := strings.TrimSpace(c.PostForm("day"))
    // 统一转成首字母大写,兼容各种大小写输入
    normalizedDay := strings.Title(dayStr)
    weekday, ok := weekdayMap[normalizedDay]
    if !ok {
        c.JSON(http.StatusBadRequest, gin.H{"error": "day必须是以下值之一:Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday"})
        return
    }
    schedule.Day = weekday
    
    // 后续的数据库存储逻辑...
}

额外注意事项

确保你的Schedule结构体中Day字段的类型是你自定义的Weekday,而不是time.Weekday:

type Schedule struct {
    Id        int       `json:"_id" bson:"_id"`
    Day       Weekday   `form:"day" json:"day" bson:"day"` // 这里是自定义的Weekday
    StartDate int64     `form:"start_date" json:"start_date" bson:"start_date"`
    // 其他字段保持不变...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:14:24