亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當作為參數傳遞給單獨包中的函數時,結構不是類型

當作為參數傳遞給單獨包中的函數時,結構不是類型

Go
www說 2023-03-21 17:17:52
我正在制作一個 JSON 驗證函數,并且正在嘗試實現它。但是,當我嘗試將它們作為參數導入我的驗證函數(位于另一個包中)時,我的結構出現了問題。它在另一個包中的原因是因為我將在不同的路由文件中調用一個通用驗證函數,所以我實際上不能在該包中包含任何結構,它們必須在路由文件中導入和定義。type UsersJSON struct {    Users struct {        Put []UserJSON `json:"PUT"`    } `json:"users"`}type UserJSON struct {    display_name     string `json:"display_name"`    username        string `json:"username"`    email           string `json:"email"`    password        string `json:"password"`}func MyFunc(w http.ResponseWriter, r *http.Request) {    errors, _ := schema.Validate(data, r, UsersJSON)}func Validate(schemaHelper interface{}) (interface{}, error) {    file, err := os.Open("config/schema/schema.json")    if err != nil {        return nil, err    }    defer file.Close()    byteValue, _ := ioutil.ReadAll(file)    var helpers schemaHelper // this is the error    json.Unmarshal(byteValue, &helpers)    fmt.Printf("%v", helpers)}我的 JSON 架構如下所示:{    "users": {        "PUT": {        }    }}我想讓這個方法起作用,因為它使自動驗證變得更容易和更快。這不會編譯并給出錯誤schemaHelper is not a type知道我該如何解決這個問題嗎?
查看完整描述

2 回答

?
慕的地8271018

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只能解組為導出的字段。


查看完整回答
反對 回復 2023-03-21
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

您收到此錯誤是因為schemaHelper它不是一種類型。實際上,interface{}正如您在 function 中聲明的那樣,它是 type 的函數變量Validate。



查看完整回答
反對 回復 2023-03-21
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號