去建立事件未定义

go build events undefined

环境:Windows10 Professional 64 位。

我想构建/安装一个 go-project(如您所见的 twitterbeat)。

C:\apps\Go_workspace\src\github.com\buehler\twitterbeat>go build
# github.com/buehler/twitterbeat/beater
beater\twitterbeat.go:62: b.Events undefined (type *beat.Beat has no field or method Events)

在这里您可以看到文件的第 62 行:

func (bt *Twitterbeat) Setup(b *beat.Beat) error {
    logp.Info("Setup waitduration and api keys")

    bt.events = b.Events

    var err error
    bt.period, err = time.ParseDuration(*bt.beatConfig.Period)
    if err != nil {
        return err
    }

    anaconda.SetConsumerKey(*bt.beatConfig.Twitter.ConsumerKey)
    anaconda.SetConsumerSecret(*bt.beatConfig.Twitter.ConsumerSecret)
    bt.api = anaconda.NewTwitterApi(*bt.beatConfig.Twitter.AccessKey, *bt.beatConfig.Twitter.AccessSecret)

    return nil
}

我不认为代码有误,因为我是直接从Github下载的。

因为我不在 linux / unix 系统上(而且我的代理有问题),所以我不能 运行 "glide"。相反,我自己下载了所有依赖项。

我可以做什么来构建 twitterbeat?

当您手动下载依赖项时,您需要确保它们与glide.yaml文件中的版本相同。 github.com/elastic/libbeat/beat/beat.gobeat.Beat 的当前版本比 glide.yaml 中的版本更新,并且不再有 Events 字段。

这不是你的问题,而是你使用的库的问题。

如代码所示,它使用了github.com/elastic/beats/libbeat/beat,然后我们跳转到beat的来源,Beat结构是:

type Beat struct {
    Name      string               // Beat name.
    Version   string               // Beat version number. Defaults to the libbeat version when an implementation does not set a version.
    UUID      uuid.UUID            // ID assigned to a Beat instance.
    BT        Beater               // Beater implementation.
    RawConfig *common.Config       // Raw config that can be unpacked to get Beat specific config data.
    Config    BeatConfig           // Common Beat configuration data.
    Publisher *publisher.Publisher // Publisher

    filters *filter.FilterList // Filters
}

它不再有 Events 字段!

您可以使用旧版本的库github.com/elastic/beats/libbeat/beat,或者您可以将问题推送给github.com/buehler/twitterbeat的所有者以通知他修复此错误。