假设我有struct
我将json
param数据绑定到
type User struct {
FirstName string `json:"firstName"`
}
属性FirstName
必须大写,以便json
值可以绑定到结构。
但我还想创建interface
以接受具有struct
类似属性的任何FirstName
。由于FirstName
已经大写并被采用,我必须将该方法命名为其他内容。
type NameInterface interface {
FirstName() string // nope
FirstNameValue() string // maybe?
}
但是,为我的所有json
struct
添加每个属性的辅助函数似乎非常奇怪,因此它们可以使用interface
。有什么我误解的东西还是我缺少的编程模式?让json
struct
与interfaces
中的go
合作的最佳方式是什么?
更多(我想做的):
我想将来自json
的{{1}}个参数解析为controllers
。然后将structs
数据传递到struct
,然后运行filters
命令以根据参数数据过滤数据。我想使用sql
,因此我可以将从不同来源创建的interfaces
传递到我的structs
。
答案 0 :(得分:2)
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)
}