golang_etcd_client_err

最近在使用golang+etcd做配置文件的自动更新,在使用etcd的golang sdk时碰到点问题,记录下。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main                                                               

import (
"fmt"
"github.com/coreos/go-etcd/etcd"
)


func main() {
keypath := "/b2c_agent/10.x.x.x/"
client := etcd.NewClient([]string{"http://10.x.x.x:4001/"})
_, err := client.SetDir(fmt.Sprintf("%sd1", keypath), 0)
if err != nil {
fmt.Printf("setdir err %s\n", err)
}
_, err = client.CreateDir(fmt.Sprintf("%sd2", keypath), 0)
if err != nil {
fmt.Printf("createdir err %s\n", err)
}
_, err = client.AddChildDir(fmt.Sprintf("%sd3", keypath), 0)
if err != nil {
fmt.Printf("addchilddir err %s\n", err)
}
res, err := client.Get(fmt.Sprintf("%sk1", keypath), true, true)
if err != nil {
fmt.Printf("get key err %s\n", err)
return
}
fmt.Println(res.Node.Value)
}

错误信息:

1
2
3
4
setdir err 502:  (unhandled http status [Moved Permanently] with body []) [0]     
createdir err 502: (unhandled http status [Moved Permanently] with body []) [0]
addchilddir err 502: (unhandled http status [Moved Permanently] with body []) [0]
test

发现get能读到数据,但是三个创建目录的方法都失败了。尝试换别的etcd服务器还是同样的问题。
google了一下这个报错,发现很少有人碰到,而且情况也不一样。
最后没办法,只好翻翻别人的代码看是怎么使用etcd的。果然发现了区别:
别人的代码:

1
client := etcd.NewClient([]string{"http://10.x.x.x:4001"})

我的代码:

1
client := etcd.NewClient([]string{"http://10.x.x.x:4001/"})

我的代码多了一个斜杆,是不是这个问题呢?改代码测试了下,果然不报错了,目录都创建成功了。
小坑,记录下。