用于測試列出用戶的代碼。 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。
- 1 回答
- 0 關注
- 178 瀏覽
添加回答
舉報
0/150
提交
取消