【发布时间】:2018-01-04 05:04:08
【问题描述】:
我正在使用 Golang validate 库作为 API 的一部分进行一些输入错误检查(用于学习目的的愚蠢演示 API)。
当执行验证时,会返回一个 errors 切片。实际上,切片由 validate 库的结构 BadField 组成,如下所示:
type BadField struct {
Field string
Err error
}
func (b BadField) Error() string {
return fmt.Sprintf("field %s is invalid: %v", b.Field, b.Err)
}
我想传递一个更具体的切片,而不是[]error,我想要[]BadField,这样我就可以访问Field 值。
到目前为止,我找不到一种从一种转换/转换到另一种的方法。也许没有(由于 go 和 slices 的性质)。也许有一个包可以为我做到这一点。
我的初始实现
我想出的方法是遍历切片并单独投射每个元素。
errors := valueWithBadStuff.Validate()
validationErrors := make([]validate.BadField, len(errors))
for _, err := range errors {
validationError, ok := err.(validate.BadField)
if !ok {
panic("badarghfiremyeyes") // S/O purposes only
}
validationErrors = append(validationErrors, validationError)
}
这对“简单”的东西有点渴望,但也许有一种更惯用的方式?或者更好的方法?
作为背景,我的意图(目前)是获取验证错误的片段并将其作为具有Field 名称和错误消息(即虚构的@ 987654330@字段:["field_name": "age", "Cannot be less than 0"])
在上面的循环之后,我进行 more 转换以生成带有json 标记的结构片段,这些结构片段实际上会进入客户端。额外的转换可能是重复的和毫无意义的,但现在,它纯粹是一个学习部分,我可能会在一两个小时内重构它。
【问题讨论】:
标签: validation go casting slice