用于测试列出用户的代码。 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条经验 获得超4个赞
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 关注
- 126 浏览
添加回答
举报
0/150
提交
取消