#api #go #controller #beego
#API #Вперед #контроллер #beego
Вопрос:
Проблема в том, что 2019/04/09 12:14:08.780 [C] [panic.go:522] Обработчик потерпел крах из-за ошибки преобразования интерфейса: интерфейс {} — это строка, а не time.Time
// SingleTenantUsage
// @Param startTime time true "startTime"
// @Param endTime time true "endTime"
// @router /singleTenantUsage [post]
func (h *HypervisorController) SingleTenantUsage() {
var bodyBytes []byte
raw := make(map[string]interface{})
if h.Ctx.Request.Body != nil {
bodyBytes, _ = ioutil.ReadAll(h.Ctx.Request.Body)
}
json.Unmarshal(bodyBytes, amp;raw)
usageSingle, err := compute.UsageSingleTenant(raw["tenantID"].(time.Time),raw["startTime"].(time.Time), raw["endTime"].(time.Time)) <---- error here
}
Комментарии:
1. Измените порядок двух последних строк. И, пожалуйста, не игнорируйте ошибки.
2. @mkopriva какая строка?
3. Вам следует изменить порядок двух последних строк, то есть вызвать,
json.Unmarshal
прежде чем пытаться прочитатьraw
переменную. Не ожидайте, что значение map будет содержать что-либо, если вы еще ничего в него не вложили.4. Go не поддерживает приведение типов / принуждение, в нем нет встроенной языковой функции, позволяющей превратить
string
вtime.Time
. Выражениеv.(T)
является утверждением типа . Итак, вы должны ввести assert для значений временных меток какstring
не какtime.Time
, а затем проанализировать эти строки с помощьюtime
пакета.5. Что-то вроде этого: play.golang.com/p/hu2OmmdIpyV