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

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

從輸入流讀取時屬性類型不同

從輸入流讀取時屬性類型不同

Go
一只萌萌小番薯 2023-08-07 18:51:48
用于測試列出用戶的代碼。    req := httptest.NewRequest("GET", "/v1/users", nil)    resp := httptest.NewRecorder()    u.app.ServeHTTP(resp, req)    if resp.Code != http.StatusOK {        t.Fatalf("getting users: expected status code %v, got %v", http.StatusOK, resp.Code)    }    var list []map[string]interface{}    if err := json.NewDecoder(resp.Body).Decode(&list); err != nil {        t.Fatalf("decoding users: %s", err)    }    want := []map[string]interface{}{        {            "id":           "a2b0639f-2cc6-44b8-b97b-15d69dbb511e",            "name":         "dcc",            "role_id":      float64(101),            "date_created": "2019-01-01T00:00:01Z",            "date_updated": "2019-01-01T00:00:01Z",        },    }model 中的 role_id 是 int 類型。type User struct {    ID          string    `db:"user_id" json:"id"`    UserName    string    `db:"user_name" json:"user_name"`    RoleID      int       `db:"role_id" json:"role_id"`    DateCreated time.Time `db:"date_created" json:"date_created"`    DateUpdated time.Time `db:"date_updated" json:"date_updated"`}為什么輸入流時會變成float64?
查看完整描述

1 回答

?
收到一只叮咚

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

User.RoleID是一個整數,它將被編碼成一個 JSON Number。由于您解組為類型值map[string]interface{}(值類型是接口),因此float64在解組為接口值時會選擇類型。


引用自json.Unmarshal()

要將 JSON 解組為接口值,Unmarshal 將以下內容之一存儲在接口值中:


bool, for JSON booleans

float64, for JSON numbers

string, for JSON strings

[]interface{}, for JSON arrays

map[string]interface{}, for JSON objects

nil for JSON null

如果您知道響應包含一個User對象,則將其解組為 類型的值User。


查看完整回答
反對 回復 2023-08-07
  • 1 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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