Golang无法更改导入模块的名称。

huangapple go评论127阅读模式
英文:

Golang failes to change the name of imported module

问题

我正在尝试将SkyDNSv1恢复并从我的分支构建它(这是Dockerfile)。SkyDNS是一个非常好用和简单的工具,用于快速服务发现,但它已经很久没有更新了。

在构建过程中出现了一个错误,这是由第三方库引起的。我无法弄清楚为什么会发生这种情况:

  1. $ docker build --no-cache -t skydns1 .
  2. Sending build context to Docker daemon 1.566 MB
  3. Sending build context to Docker daemon
  4. Step 0 : FROM golang:1.4.2
  5. ---> 3e8cb8e0c765
  6. Step 1 : WORKDIR /go/src
  7. ---> Running in 3a06cf460ad9
  8. ---> 1dd14a099164
  9. Removing intermediate container 3a06cf460ad9
  10. Step 2 : RUN go get github.com/codegangsta/cli
  11. ---> Running in eabcfd6fe621
  12. ---> c9ea222f2d74
  13. Removing intermediate container eabcfd6fe621
  14. Step 3 : RUN go get github.com/vitalyisaev2/skydns1
  15. ---> Running in 3264582b2e7a
  16. # github.com/rcrowley/go-metrics/influxdb
  17. github.com/rcrowley/go-metrics/influxdb/influxdb.go:19: undefined: client.ClientConfig
  18. github.com/rcrowley/go-metrics/influxdb/influxdb.go:38: undefined: client.Series
  19. github.com/rcrowley/go-metrics/influxdb/influxdb.go:44: undefined: client.Series
  20. github.com/rcrowley/go-metrics/influxdb/influxdb.go:52: undefined: client.Series
  21. github.com/rcrowley/go-metrics/influxdb/influxdb.go:60: undefined: client.Series
  22. github.com/rcrowley/go-metrics/influxdb/influxdb.go:70: undefined: client.Series
  23. github.com/rcrowley/go-metrics/influxdb/influxdb.go:82: undefined: client.Series
  24. github.com/rcrowley/go-metrics/influxdb/influxdb.go:93: undefined: client.Series
  25. github.com/rcrowley/go-metrics/influxdb/influxdb.go:106: client.WriteSeries undefined (type *client.Client has no field or method WriteSeries)
  26. INFO[0075] The command [/bin/sh -c go get github.com/vitalyisaev2/skydns1] returned a non-zero code:

但是,如果你查看引起此错误的文件,你会注意到Golang对influxdb/client感到困惑。我认为编译器没有将导入的名称client替换为应该替换的influxClient

  1. package influxdb
  2. import (
  3. "fmt"
  4. influxClient "github.com/influxdb/influxdb/client"
  5. "github.com/rcrowley/go-metrics"
  6. "log"
  7. "time"
  8. )

可能我只是忽略了一个明显的错误。任何帮助将不胜感激。

英文:

I'm trying to bring SkyDNSv1 back to life and build it from my fork (here is Dockerfile). SkyDNS was really good and simple tool for the quick service discovery, but it wasn't updated for a long time.

There is an error in build process and it's caused by third party library. I cannot figure out why does it happen:

  1. $ docker build --no-cache -t skydns1 .
  2. Sending build context to Docker daemon 1.566 MB
  3. Sending build context to Docker daemon
  4. Step 0 : FROM golang:1.4.2
  5. ---> 3e8cb8e0c765
  6. Step 1 : WORKDIR /go/src
  7. ---> Running in 3a06cf460ad9
  8. ---> 1dd14a099164
  9. Removing intermediate container 3a06cf460ad9
  10. Step 2 : RUN go get github.com/codegangsta/cli
  11. ---> Running in eabcfd6fe621
  12. ---> c9ea222f2d74
  13. Removing intermediate container eabcfd6fe621
  14. Step 3 : RUN go get github.com/vitalyisaev2/skydns1
  15. ---> Running in 3264582b2e7a
  16. # github.com/rcrowley/go-metrics/influxdb
  17. github.com/rcrowley/go-metrics/influxdb/influxdb.go:19: undefined: client.ClientConfig
  18. github.com/rcrowley/go-metrics/influxdb/influxdb.go:38: undefined: client.Series
  19. github.com/rcrowley/go-metrics/influxdb/influxdb.go:44: undefined: client.Series
  20. github.com/rcrowley/go-metrics/influxdb/influxdb.go:52: undefined: client.Series
  21. github.com/rcrowley/go-metrics/influxdb/influxdb.go:60: undefined: client.Series
  22. github.com/rcrowley/go-metrics/influxdb/influxdb.go:70: undefined: client.Series
  23. github.com/rcrowley/go-metrics/influxdb/influxdb.go:82: undefined: client.Series
  24. github.com/rcrowley/go-metrics/influxdb/influxdb.go:93: undefined: client.Series
  25. github.com/rcrowley/go-metrics/influxdb/influxdb.go:106: client.WriteSeries undefined (type *client.Client has no field or method WriteSeries)
  26. INFO[0075] The command [/bin/sh -c go get github.com/vitalyisaev2/skydns1] returned a non-zero code:

But if you look through the file causing this error, you'll notice that Golang is confused about influxdb/client. I think that compiler doesn't replace imported name client with influxClient as it should do:

  1. package influxdb
  2. import (
  3. "fmt"
  4. influxClient "github.com/influxdb/influxdb/client"
  5. "github.com/rcrowley/go-metrics"
  6. "log"
  7. "time"
  8. )

Probably I just missing an obvious mistake. Any help will be appreciated.

答案1

得分: 3

Go编译器不会替换或重写任何内容,代码只是错误的。github.com/rcrowley/go-metrics/influxdb包是使用一些已经不存在的influxdb客户端代码编写的。(看起来已经有几个github问题与此有关)

如果你查看当前的influxdb/client包,你会发现根本没有SeriesClientConfigClient.WriteSeries。为了使你的项目能够构建,你需要删除对github.com/rcrowley/go-metrics/influxdb的依赖。

英文:

The Go compiler doesn't replace or rewrite anything, the code is just wrong. The github.com/rcrowley/go-metrics/influxdb package was written with some other influxdb client code that no longer exists. (Looks like there are a couple github issues open about this already)

If you look at the current influxdb/client package, you'll see there's no Series, ClientConfig, or Client.WriteSeries at all. You'll need to drop the dependency on github.com/rcrowley/go-metrics/influxdb in order to get your project to build.

huangapple
  • 本文由 发表于 2015年6月19日 02:18:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/30922834.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定