как сделать typeconversion, когда структура содержит интерфейс и диапазон, чтобы получить данные CSV - PullRequest
0 голосов
/ 29 апреля 2020

Ситуация такова, что у меня есть один интерфейс внутри структуры теперь я должен ранжировать эти данные, чтобы получить формат CSV. это распорка и интерфейс

PaginatedListResponseDataRec struct {
TotalDBRecCnt  int         `json:"totalrecords"`    // total number of records exists in the database.
FilteredRecCnt int         `json:"filteredrecords"` // number of records filtered based on the search criteria
RecList        interface{} `json:"records"`         // list of filtered records
TodayDBRecCnt  int         `json:"todayrecords"`}

теперь в этой структуре RecList содержал данные, которые я хочу отобразить в формате CSV.

isSuccess, responseData := dbAccess.GetJobList(reqFilterRec, clientID)

здесь responseData - это тип PaginatedListResponseDataRe c struct

    v := reflect.ValueOf(responseData.RecList)
values := make([]interface{}, v.NumField())

for i := 0; i < v.NumField(); i++ {
    values[i] = v.Field(i).Interface()
}

fmt.Println("values: ", values)

это код, который я использую для ранжирования, но эта ошибка возврата

exception: &runtime.TypeAssertionError{_interface:(*runtime._type)(0xa458e0), concrete:(*runtime._type)(0xa05960), asserted:(*runtime._type)(0xa05c60), missingMethod:""}

может кто-нибудь помочь ..

1 Ответ

0 голосов
/ 05 мая 2020

Ранжирование срезов / массивов с отражением не выполняется с NumField и Field, они используются в структурах. Вам нужны Len () и Index ():

v := reflect.ValueOf(responseData.RecList)
values := make([]interface{}, v.Len())

for i := 0; i < v.Len(); i++ {
    values[i] = v.Index(i).Interface()
}

fmt.Println("values: ", values)

https://golang.org/pkg/reflect/#Value .Len

https://golang.org/pkg/reflect/#Value. Индекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...