最近在使用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/"})
|
我的代码多了一个斜杆,是不是这个问题呢?改代码测试了下,果然不报错了,目录都创建成功了。
小坑,记录下。