2 回答

TA貢獻1796條經驗 獲得超4個贊
您正在嘗試聲明一個名為helpers, 類型的變量schemaHelper,但是(至少在顯示的代碼中)您沒有定義任何名為 的類型schemaHelper。您有一個名為 的變量schemaHelper。您不能將類型用作變量,或將變量用作類型。您必須Validate通過傳遞一個實例來調用UsersJSON,然后您可以直接將 JSON 解組到該實例中??雌饋砟赡苷趯ふ业氖沁@樣的東西:
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)
}
這會將 JSON 解組為變量schemaHelper(無論它是什么類型),供調用者在其認為合適的情況下使用。請注意,這是一個粗略的最佳猜測,因為在您的問題中,調用傳遞Validate了 3 個參數,但給出的函數定義只接受 1 個參數。
但是,我認為這不會像您根據問題認為的那樣進行“驗證”。它只驗證 JSON 在語法上是有效的,而不是它與您struct傳入的任何關系 - 它可能具有結構中未定義的字段,它可能缺少已定義的字段,并且不會返回任何錯誤。
最后,該類型UsersJSON沒有導出字段(所有字段都以小寫字母開頭,使它們未導出/私有),因此無論如何都不會將任何內容解組到其中。encoding/json只能解組為導出的字段。

TA貢獻1812條經驗 獲得超5個贊
您收到此錯誤是因為schemaHelper
它不是一種類型。實際上,interface{}
正如您在 function 中聲明的那樣,它是 type 的函數變量Validate
。
- 2 回答
- 0 關注
- 131 瀏覽
添加回答
舉報