Передача функции в качестве параметра: несовместимые типы в Golang - PullRequest
0 голосов
/ 14 сентября 2018

Довольно новый для Go, но все еще не знаю, почему это не работает. Функция (A) определяется и передается в качестве аргумента другой функции (B), которая принимает аргументы A точно правильным образом (AFAIK):

// Function A
func writeToPumps(keys []interface{}, job *health.Job, startTime time.Time) {..}

// Function B
func GenerateDemoData(start time.Time, days int, orgId string, writer func(keys []interface{}, job *health.Job, startTime time.Time)) {...}

//calling Function B with Function A as last argument:
demo.GenerateDemoData(time.Now().AddDate(0, 0, -30), 30, buildDemoData, writeToPumps)

Что дает:

. / Main.go: 191: 56: нельзя использовать writeToPumps (тип func ([] interface {}, * "tyk-pump / vendor / github.com / gocraft / health". Job, time.Time)) как тип func ([] interface {}, * "github.com/TykTechnologies/tyk-pump/vendor/github.com/gocraft/health" .Job, time.Time) в аргументе для demo.GenerateDemoData

Как я могу это исправить?

EDIT

Раздел импорта в main.go:

import (
"github.com/TykTechnologies/tyk-pump/analytics/demo"
"time"

"os"
"fmt"

"github.com/gocraft/health"
"gopkg.in/vmihailenco/msgpack.v2"

"github.com/TykTechnologies/logrus"
"github.com/TykTechnologies/logrus-prefixed-formatter"
"github.com/TykTechnologies/tyk-pump/analytics"
"github.com/TykTechnologies/tyk-pump/pumps"
"github.com/TykTechnologies/tyk-pump/storage"
"github.com/TykTechnologies/tykcommon-logger"

"gopkg.in/alecthomas/kingpin.v2"
)

Другая полезная информация:

ГОПАТ: /home/nilsnolde/dev/go/uni

Структура проекта:

../uni/src/
        |
        --tyk-pump/
              |
              --vendor/
                main.go
                ...

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Ваш код должен жить под /uni/src/github.com/TykTechnologies/tyk-pump. Поскольку это не так, когда ваш код внутренне ссылается на эту иерархию пакетов, он перепродает ваш код, генерируя повторяющиеся пути импорта.

Таким образом, исправление, вероятно, состоит в том, чтобы просто переместить /uni/src/tyk-pump в /uni/src/github.com/TykTechnologies/tyk-pump, а затем повторно импортировать все ваши фирменные пакеты.

0 голосов
/ 14 сентября 2018

Файл, в котором определена функция A, скорее всего, не совпадает с файлом, в котором вы определили B. Оба файла импортируют health, где определение health.Job кажется живым.

Однако они, похоже, используют другой путь импорта, поэтому GO считает, что определение health.Job не совпадает.

Вы должны проверить операторы import в обоих местах и ​​сделать их одинаковыми. Если они уже одинаковы, в настройках проекта есть что-то, что необходимо скорректировать, но недостаточно контекста, чтобы выяснить, что это может быть.

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