繁体   English   中英

在golang中为JSON结构创建接口

[英]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 structgo 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM