Я уверен, что это синтаксическая проблема, которую мне еще предстоит выяснить с Go -

Ошибка, которую я получаю -

не может использовать * term (тип elastic.AggregationBucketKeyItem) как тип elastic.Aggregations в аргументе для extractBucket

Строка, вызывающая ошибку:

"Value": extractBucket(parts[1:], *term),

Соответствующий код для контекста

// from https://github.com/olivere/elastic/blob/v3.0.22/search_aggs.go

type Aggregations map[string]*json.RawMessage

type AggregationBucketSignificantTerms struct {
    Aggregations

    DocCount int64                               //`json:"doc_count"`
    Buckets  []*AggregationBucketSignificantTerm //`json:"buckets"`
    Meta     map[string]interface{}              // `json:"meta,omitempty"`
}

// my code

func extractBucket(parts []string, aggs elastic.Aggregations) interface{} {
    // bunch of code removed

           terms, found := aggs.Terms(part)
           for _, term := range terms.Buckets {
            if len(parts) == 0 {
                retval[(term.Key).(string)] = map[string]interface{}{
                    "Count": term.DocCount,
                }
            } else {
                retval[(term.Key).(string)] = map[string]interface{}{
                    "Count": term.DocCount,
                    "Value": extractBucket(parts[1:], *term),
                }
            }
        }
}
-2
koblas 29 Фев 2016 в 03:00

2 ответа

Лучший ответ

Распространенное заблуждение состоит в том, что встраивание типа заставляет вас «унаследовать» этот тип. Несмотря на то, что AggregationBucketSignificantTerms встраивает Aggregations, он не относится к компилятору. Он просто имеет поле типа Aggregations и предоставляет методы из этого типа на своем верхнем уровне. Это немного похоже на наследование, но, вероятно, это не то, к чему вы привыкли с такими вещами, как подклассы Java.

Чтобы решить эту проблему, вы можете попробовать "Value": extractBucket(parts[1:], *term.Aggregations),, но я не знаю, решит ли это вашу проблему или нет.

2
captncraig 29 Фев 2016 в 00:53

Что ж, ошибка довольно очевидна:

не может использовать (* термин, имя переменной) (тип elastic.AggregationBucketKeyItem <- Текущий тип переменных) как (тип elastic.Aggregations <- Ожидаемый тип) в аргументе для extractBucket

Какой бы ни была ваша ценность *term

Создано: for _, term := range terms.Buckets {

Не подходит для функции

extractBucket(parts []string, aggs elastic.Aggregations)

Принимает тип elastic.Aggregations

2
Datsik 29 Фев 2016 в 00:43