Как потратить время.Время как необработанное тело API

#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