0

代码是:

import (
    "context"
    "crypto/tls"
    "time"

    "go.etcd.io/etcd/clientv3"
)
func main(){
    ...
    config := clientv3.Config{}
    config.Username = u.username
    ...
}

go.mod 文件

module github.com/xxx

go 1.17

require (

    github.com/coreos/etcd v2.3.8+incompatible // indirect
    go.etcd.io/etcd v2.3.8+incompatible // indirect
)

它失败并显示此消息:

config.Username undefined (type clientv3.Config has no field or method Username)

有没有办法解决这个问题?github.com/coreos/etcd/clientv3和go.etcd.io/etcd有什么区别?</p>

4

1 回答 1

1

go.etcd.io/etcd/clientv3并且go.etcd.io/etcd/client/v3有些令人困惑的是,它们都是使用包名的不同包clientv3

client/v3.Config类型具有Username您期望的字段,因此也许您可以更新代码以导入该包而不是另一个包?

import (
    …
    "go.etcd.io/etcd/client/v3"
)

https://play.golang.org/p/2SK2FUNxWs9


github.com/coreos/etcd/clientv3github.com/coreos/etcd在他们采用 Go 模块之前,它是来自 repo的包的旧名称。当他们移动到模块时,他们将规范导入路径更改为go.etcd.io/etcd/client/v3,但是(通过 Go 模块系统的一些怪癖)仍然可以解决旧路径和新路径的混合,使用旧路径中的代码但从新路径提供网址。您可能只想使用新的规范路径。

于 2021-08-26T16:51:34.603 回答