Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)
生活随笔
收集整理的這篇文章主要介紹了
Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 示例 1
package main
import ("context""fmt""go.etcd.io/etcd/clientv3""time"
)
// 寫入讀取
func SetGet() {// 配置 etcd ,創建客戶端cli, err := clientv3.New(clientv3.Config{Endpoints: []string{"127.0.0.1:2379"},DialTimeout: 5 * time.Second,})if err != nil {fmt.Println("connect failed, err:", err)return}defer cli.Close()// 存儲ctx, cancel := context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "/sample_key/name/", "sample_value_name")defer cancel()if err != nil {fmt.Println("put name failed, err:", err)return}// 存儲ctx, cancel = context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "/sample_key/name/laixhe", "sample_value_name_laixhe")defer cancel()if err != nil {fmt.Println("put name failed, err:", err)return}// 存儲 - 租約時間del, _:= cli.Grant(context.TODO(), 10) // 申請租約,10s后就會自動移除ctx, cancel = context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "/sample_key/name/del", "sample_value_name_del", clientv3.WithLease(del.ID))defer cancel()if err != nil {fmt.Println("put name failed, err:", err)return}// 獲取ctx, cancel = context.WithTimeout(context.Background(), time.Second)resp, err := cli.Get(ctx, "/sample_key/name/")defer cancel()if err != nil {fmt.Println("get failed, err:", err)return}for _, ev := range resp.Kvs {fmt.Printf("get (/sample_key/name/) %s : %s\n", ev.Key, ev.Value)}// 獲取前綴的 /sample_key/name/ 都返回ctx, cancel = context.WithTimeout(context.Background(), time.Second)resp, err = cli.Get(ctx, "/sample_key/name/", clientv3.WithPrefix())defer cancel()if err != nil {fmt.Println("get failed, err:", err)return}for _, ev := range resp.Kvs {fmt.Printf("get all (/sample_key/name/) - %s : %s\n", ev.Key, ev.Value)}
}
2. 示例 2
package mainimport ("context""fmt""time""github.com/coreos/etcd/clientv3"
)type Etcd struct {client *clientv3.Clientkv clientv3.KVlease clientv3.Lease
}// 全局單例
var (G_etcd *Etcd
)// 初始化
func InitEtcd() (err error) {// 初始化配置config := clientv3.Config{Endpoints: []string{"192.168.0.129:2379", "localhost:22379"}, // 集群地址DialTimeout: time.Duration(5) * time.Millisecond, // 連接超時}// 建立連接client, err := clientv3.New(config)if err != nil {fmt.Println(err)}// 得到KV和Lease的API子集kv := clientv3.NewKV(client)lease := clientv3.NewLease(client)// 賦值單例G_etcd = &Etcd{client: client,kv: kv,lease: lease,}return
}func (etcd *Etcd) GetKeyValue(key string) error {getResp, err := etcd.kv.Get(context.TODO(), key, clientv3.WithPrefix())if err != nil {fmt.Println(err)}// 遍歷所有任務, 進行反序列化for _, kvPair := range getResp.Kvs {fmt.Println(kvPair)}return err
}func (etcd *Etcd) PutKeyValue(key, value string) error {// 保存到etcdputResp, err := etcd.kv.Put(context.TODO(), key, value, clientv3.WithPrevKV())if err != nil {fmt.Println(err)}// 如果是更新, 那么返回舊值if putResp.PrevKv != nil {fmt.Println(putResp.PrevKv.Value)}return err
}func (etcd *Etcd) DeleteKey(key string) error {// 從etcd中刪除它delResp, err := etcd.kv.Delete(context.TODO(), key, clientv3.WithPrevKV())if err != nil {fmt.Println(err)}// 返回被刪除的值if len(delResp.PrevKvs) != 0 {fmt.Println(delResp.PrevKvs[0].Value)}return err
}func (etcd *Etcd) PutKeyWithLease(key string, timeout int64) (err error) {leaseGrantResp, err := etcd.lease.Grant(context.TODO(), timeout)if err != nil {return}// 租約IDleaseId := leaseGrantResp.ID_, err = etcd.kv.Put(context.TODO(), key, "", clientv3.WithLease(leaseId))if err != nil {return}return
}func main() {InitEtcd()G_etcd.PutKeyValue("/demo/A/B", "hello world")G_etcd.GetKeyValue("/demo/A/B")G_etcd.DeleteKey("/demo/A/B")G_etcd.PutKeyWithLease("/demo/A/B", 100)
}
參考:
https://blog.csdn.net/c_circle/article/details/98473421
https://www.jianshu.com/p/3206e35677b4
https://www.cnblogs.com/sunlong88/p/11295424.html
https://segmentfault.com/a/1190000020868242?utm_source=tag-newest
https://gitbook.cn/books/5e7637996ba17a6d2c9a3352/index.html
總結
以上是生活随笔為你收集整理的Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国模胚行业市场研究
- 下一篇: Go 学习笔记(60)— Go 第三方库