将继承的结构作为基础对象传递

时间:2016-02-29 00:00:34

标签: oop go

我确定这是一个语法问题,我还没想到Go -

我得到的错误 -

  

不能使用* term(类型elastic.AggregationBucketKeyItem)作为类型elastic.Aggregations in argumentBucket

产生错误的行是

"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 个答案:

答案 0 :(得分:2)

这个错误非常自我解释:

  

不能使用(* term,变量名)(类型elastic.AggregationBucketKeyItem< - 变量当前类型)作为(类型elastic.Aggregations< - 预期类型)在extractBucket的参数中

无论您的*term

生成者:for _, term := range terms.Buckets {

不是函数的正确类型

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

采用elastic.Aggregations

的类型

答案 1 :(得分:2)

一种常见的误解是,嵌入一种类型会让你继承"继承"那种类型。即使String[] coords = smsBody.split(";"); String lat = coords[0]; String lng = coords[1]; Double newLat = Double.parseDouble(lat); Double newLng = DOuble.parseDouble(lng); mapActivityFragment mapFrag = new mapActivityFragment(); mapFrag.setLatLng(newLat, newLng); 嵌入 AggregationBucketSignificantTerms,它也不是编译器的一个。它只有一个Aggregations类型的字段,它在它的顶层提供该类型的方法。这感觉有点像继承,但可能不是你习惯于Java子类之类的东西。

要解决此问题,您可以尝试Aggregations,但我不清楚这是否能解决您的问题。