go etcd 用脚本多次设置,无法替换, 设置后无法用 etcdctl.exe get 方法获取,有疑问
package main
import (
"context"
"fmt"
etcd_client "go.etcd.io/etcd/clientv3" // 对于第三方开源组件, 取别名的好处是,以后升级了,直接改导入的包名就行了
"time"
)
func main() {
// 初始化一个客户端
cli, err := etcd_client.New(etcd_client.Config{
Endpoints: []string{"localhost:2379"},// 此处可以写多个ip端口
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Println("etcd连接失败", err)
return
}
defer cli.Close()
//ctx 参考这个文档 https://blog-golang.org/context
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)// 设置ctx超时时间
_, err = cli.Put(ctx, "/logagent/conf/", "sample_value") // cli设置key,value, ctx是超时控制
_, err = cli.Put(ctx, "/logagent/conf", "sample_value_asd") // cli设置key,value, ctx是超时控制
_, err = cli.Put(ctx, "/logagent/conf/asd2", "sample_value_asd2") // ctx设置key,value
cancel() // 上面的cli.Put操作完成,任务完成了, 就可以把ctx取消掉,释放资源
if err != nil {
fmt.Println("etcd设置失败", err)
return
}
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
resp, err := cli.Get(ctx, "/logagent/conf/")
cancel()
if err != nil {
fmt.Println("获取etcd设置失败")
return
}
for _, v := range resp.Kvs { // resp.Kvs是数组类型的, 因为/logagent/conf/是目录的结构,它的下面可能有很多文件
fmt.Printf("%s : %s \n", v.Key, v.Value)
}
}