在结构体标签中使用 fmt 格式说明符。

huangapple go评论83阅读模式
英文:

Use fmt specifier in struct tag

问题

在Golang中,不支持在结构标签(struct tag)中使用fmt specifier或类似的功能。结构标签是用于在运行时解析和处理结构的元数据的字符串。它们通常用于库和框架中,用于实现序列化、验证等功能。

在你提供的示例中,你试图在结构标签中使用fmt.Sprintf函数来动态生成标签的值。然而,这是不被支持的。结构标签的值必须是静态的字符串,不能包含任何运行时的逻辑。

如果你需要在结构标签中使用动态值,你可以考虑使用其他方法,例如在运行时使用反射来处理结构标签。但是,这种方法可能会增加代码的复杂性和运行时的开销。

总结来说,Golang不支持在结构标签中使用fmt specifier或类似的功能。结构标签的值必须是静态的字符串。

英文:

Is it possible to use fmt specifier or something like that in the struct tag in Golang, e.g.

type MyReqest struct {
    category string fmt.Sprintf(`json:"category" binding:"required,oneof=%s"`, strings.Join(options, " "))
}

This is not working but I want to know if Golang support such a feature.

答案1

得分: 2

不,这是不可能的。最接近的方法是使用go generate代码生成器来生成包括标签在内的整个结构体。这将在构建时而不是运行时完成。

参见:https://pkg.go.dev/cmd/go#hdr-Generate_Go_files_by_processing_source 和 https://go.dev/blog/generate

如果你需要在运行时完成这个操作,可能可以使用reflect.StructOf在运行时定义带有标签的整个结构体。

英文:

No, this is not possible. Closest possible thing is to use go generate code generator to generate the entire struct including tags. That will be done during build time and not runtime.

See: https://pkg.go.dev/cmd/go#hdr-Generate_Go_files_by_processing_source and https://go.dev/blog/generate .

If you need to do this in runtime you can probably use reflect.StructOf to define the entire struct with tags in runtime.

huangapple
  • 本文由 发表于 2022年7月3日 10:04:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/72843524.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定