英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论