[英]Creating an interface for a JSON struct in golang
说我有一个struct
,我绑定json
参数数据喜欢
type User struct {
FirstName string `json:"firstName"`
}
必须将属性FirstName
大写,以便将json
值绑定到该结构。
但是我也想创建一个interface
来接受具有FirstName
like属性的任何struct
。 由于FirstName
已被大写并采用,因此我不得不将方法命名为其他名称。
type NameInterface interface {
FirstName() string // nope
FirstNameValue() string // maybe?
}
但是似乎必须为我的所有json
struct
上的每个属性添加一个辅助函数真的很奇怪,只是它们可以与interface
一起使用。 是否有我误会的东西或缺少的编程模式? 使json
struct
与go
interfaces
go
工作的最佳方法是什么?
更多(我正在尝试做的事情):
我想将来自controllers
json
参数解析为structs
。 然后将该struct
数据传递到filters
,然后运行sql
命令以基于params数据过滤数据。 我想使用interfaces
以便将从不同来源创建的structs
传递到我的filters
。
Go中的接口指定了行为 ,但是您试图使用它们来描述数据 。 这就是为什么您发现自己的方法很困难的原因-这也是为什么它可能是错误的方法的原因。
在不知道您真正要实现的目标的情况下很难给出更具体的答案,但是,例如,如果您希望能够具有可以从不同结构类型读取特定命名字段的函数,则可能需要定义一个结构来描述此数据,然后将该结构嵌入其他结构类型。
这样的事情可能会满足您的需求:
type Person struct {
FirstName string `json:"firstName"`
}
type User struct {
Person
// other User-specific fields
}
type Admin struct {
Person
// other Admin-specific fields
}
func Harass(p Person) { }
func main() {
user := User{Person{"Frank"}}
Harass(user.Person)
admin := Admin{Person{"Angelina"}}
Harass(admin.Person)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.