簡體   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