2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您正在嘗試聲明一個(gè)名為helpers, 類(lèi)型的變量schemaHelper,但是(至少在顯示的代碼中)您沒(méi)有定義任何名為 的類(lèi)型schemaHelper。您有一個(gè)名為 的變量schemaHelper。您不能將類(lèi)型用作變量,或?qū)⒆兞坑米黝?lèi)型。您必須Validate通過(guò)傳遞一個(gè)實(shí)例來(lái)調(diào)用UsersJSON,然后您可以直接將 JSON 解組到該實(shí)例中。看起來(lái)您可能正在尋找的是這樣的東西:
func MyFunc(w http.ResponseWriter, r *http.Request) {
var unmarshaled UsersJSON
errors, _ := schema.Validate(&unmarshaled)
}
func Validate(schemaHelper interface{}) (error) {
file, err := os.Open("config/schema/schema.json")
if err != nil {
return nil, err
}
defer file.Close()
byteValue, _ := ioutil.ReadAll(file)
return json.Unmarshal(byteValue, schemaHelper)
}
這會(huì)將 JSON 解組為變量schemaHelper(無(wú)論它是什么類(lèi)型),供調(diào)用者在其認(rèn)為合適的情況下使用。請(qǐng)注意,這是一個(gè)粗略的最佳猜測(cè),因?yàn)樵谀膯?wèn)題中,調(diào)用傳遞Validate了 3 個(gè)參數(shù),但給出的函數(shù)定義只接受 1 個(gè)參數(shù)。
但是,我認(rèn)為這不會(huì)像您根據(jù)問(wèn)題認(rèn)為的那樣進(jìn)行“驗(yàn)證”。它只驗(yàn)證 JSON 在語(yǔ)法上是有效的,而不是它與您struct傳入的任何關(guān)系 - 它可能具有結(jié)構(gòu)中未定義的字段,它可能缺少已定義的字段,并且不會(huì)返回任何錯(cuò)誤。
最后,該類(lèi)型UsersJSON沒(méi)有導(dǎo)出字段(所有字段都以小寫(xiě)字母開(kāi)頭,使它們未導(dǎo)出/私有),因此無(wú)論如何都不會(huì)將任何內(nèi)容解組到其中。encoding/json只能解組為導(dǎo)出的字段。

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您收到此錯(cuò)誤是因?yàn)?code>schemaHelper它不是一種類(lèi)型。實(shí)際上,interface{}
正如您在 function 中聲明的那樣,它是 type 的函數(shù)變量Validate
。
- 2 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報(bào)