今天遇到了一個(gè)小坑:使用etcdv3的時(shí)候自晰,報(bào)了這么一堆錯(cuò)誤
# github.com/coreos/etcd/clientv3/balancer/resolver/endpointvendor\github.com\coreos\etcd\clientv3\balancer\resolver\endpoint\endpoint.go:114:78: undefined: resolver.BuildOption
vendor\github.com\coreos\etcd\clientv3\balancer\resolver\endpoint\endpoint.go:182:31: undefined: resolver.ResolveNowOption
# github.com/coreos/etcd/clientv3/balancer/pickervendor\github.com\coreos\etcd\clientv3\balancer\picker\err.go:37:44: undefined: balancer.PickOptions
vendor\github.com\coreos\etcd\clientv3\balancer\picker\roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
上網(wǎng)查了一下原因匹舞,說是最新的v1.27.0版本的google.golang.org/grpc包不支持etcdv3。同時(shí)網(wǎng)上也給出了解決方案:將grpc1.27.0 替換成grpc1.26.0版本(具體操作是手動(dòng)在go.mod的require下修改google.golang.org/grpc v1.26.0腰鬼,或者直接用命令 go mod edit -require=google.golang.org/grpc@v1.26.0)
but~~~~實(shí)際操作后發(fā)現(xiàn),替換包版本號(hào)的方案是對(duì)的塑荒,但是操作不正確熄赡,修改require不能指定包的版本號(hào)!
正確的做法是齿税,在go.mod中用replace指定包版本號(hào)彼硫,比如:
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
然后再go run或go build,一切完美~~