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

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

結構字段標記“名稱”與 reflect.StructTag.Get 不兼容:結構標記對的錯誤語法

結構字段標記“名稱”與 reflect.StructTag.Get 不兼容:結構標記對的錯誤語法

Go
holdtom 2022-12-26 16:51:21
我讀過這個,但它與我的情況不同,我有以下代碼:package mainimport (    "bytes"    "fmt"    "reflect"    "strconv"    "strings")type User struct {    Name string `name`    Age  int64  `age`}func main() {    var u User = User{"bob", 10}    res, err := JSONEncode(u)    if err != nil {        panic(err)    }    fmt.Println(string(res))}func JSONEncode(v interface{}) ([]byte, error) {    refObjVal := reflect.ValueOf(v)    refObjTyp := reflect.TypeOf(v)    buf := bytes.Buffer{}    if refObjVal.Kind() != reflect.Struct {        return buf.Bytes(), fmt.Errorf(            "val of kind %s is not supported",            refObjVal.Kind(),        )    }    buf.WriteString("{")    pairs := []string{}    for i := 0; i < refObjVal.NumField(); i++ {        structFieldRefObj := refObjVal.Field(i)        structFieldRefObjTyp := refObjTyp.Field(i)        switch structFieldRefObj.Kind() {        case reflect.String:            strVal := structFieldRefObj.Interface().(string)            pairs = append(pairs, `"`+string(structFieldRefObjTyp.Tag)+`":"`+strVal+`"`)        case reflect.Int64:            intVal := structFieldRefObj.Interface().(int64)            pairs = append(pairs, `"`+string(structFieldRefObjTyp.Tag)+`":`+strconv.FormatInt(intVal, 10))        default:            return buf.Bytes(), fmt.Errorf(                "struct field with name %s and kind %s is not supprted",                structFieldRefObjTyp.Name,                structFieldRefObj.Kind(),            )        }    }    buf.WriteString(strings.Join(pairs, ","))    buf.WriteString("}")    return buf.Bytes(), nil}它運行完美,輸出如下:{"name":"bob","age":10}但是作為 VS 代碼,它給了我以下問題:
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

請注意,這只是一個警告,告訴您您沒有遵守約定。如您所知,該代碼編譯并運行并輸出您想要的結果:https ://go.dev/play/p/gxcv8qPVZ6z 。

為避免警告,請禁用 linter,或者更好的是,通過key:"value"在結構標記中使用來遵循約定,然后使用以下Get方法提取值:https ://go.dev/play/p/u0VTGL48TjO 。


https://pkg.go.dev/[email protected]#StructTag

StructTag 是結構字段中的標記字符串。

按照慣例,標記字符串是可選的空格分隔鍵:“值”對的串聯。每個鍵都是一個非空字符串,由除空格(U+0020 ' ')、引號(U+0022 '"')和冒號(U+003A ':')之外的非控制字符組成。每個值都被引用使用 U+0022 '"' 字符和 Go 字符串文字語法。


查看完整回答
反對 回復 2022-12-26
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

key:"value"例如,結構標簽應該是 a field:"name"。


type User struct {

    Name string `field:"name"`

    Age  int64  `field:"age"`

}


查看完整回答
反對 回復 2022-12-26
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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