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