KIWI'S HOUSE
moeKiwiSAMA
Dec 28, 2018
It takes 6 minutes to read this article.

需要用到的轮子

在github上可以找到etcd/clientv3

但是我们现在不需要去github上找到它的项目

我们只要在Shell输入

go get go.etcd.io/etcd/clientv3

就可以获取到etcd/clientv3的库

准备开始了

需要导入的库

首先我们需要导入一些库

库名 用途
“go.etcd.io/etcd/clientv3” 使用etcd的v3客戶端
“context” 需要用到context.TODO()占位
“time” 时间
“fmt” 格式化输出
import (
    "go.etcd.io/etcd/clientv3"
	"context"
    "time"
    "fmt"
)

使用到的变量

我们需要定义几个变量

变量名 变量类型 用途
config clientv3.Config 存放连接配置
client *clientve.Client 实例化客户端
kv clientv3.KV 用來操作kv
putResp *clientv3.PutResponse 放值
getResp *clientv3.GetResponse 取值
err error 记录错误

代码如下:

var (
	config clientv3.Config
	client *clientv3.Client
    kv clientv3.KV
    putResp *clientv3.PutResponse
	getResp *clientv3.GetResponse
	err error
)

客户端连接

客户端配置

需要使用到config这个变量

结构体内变量 作用
Endpoints []string{“127.0.0.1:2379”} etcd服务开启的地址
DialTimeout 5 * time.Second 超过5秒就超时

代码如下:

config = clientv3.Config{
    Endpoints: []string{"127.0.0.1:2379"},
    DialTimeout: 5 * time.Second,
}

建立连接并处理错误

如果没有错误就继续运行,有错误就打印错误并退出主函数

if client, err = clientv3.New(config); err != nil {
    fmt.Println(err)
    return
}

操作KV

实例化KV

kv = clientv3.NewKV(client)

放值

我们把当前时间放到”/timer/last”

if putResp, err = kv.Put(context.TODO()), "/timer/last", time.Now().String); err != nil{
    fmt.Println(err)
    return
}

取值

取出刚刚放入的值

if getResp, err = kv.Get(context.TODO(), "/timer/last"); err != nil {
    fmt.Println(err)
    return
} else {
    fmt.Println(getResp,Kvs)
}

所有的代码

package main

import (
	"context"
	"fmt"
	"go.etcd.io/etcd/clientv3"
	"time"
)

func main() {
	var (
		config clientv3.Config
		client *clientv3.Client
		err error
		kv clientv3.KV
		getResp *clientv3.GetResponse
	)
	config = clientv3.Config{
		Endpoints: []string{"127.0.0.1:2379"},
		DialTimeout: 5 * time.Second,
	}
	if client, err = clientv3.New(config); err != nil {
		fmt.Println(err)
		return
	}

	kv = clientv3.NewKV(client)
	if putResp, err = kv.Put(context.TODO()), "/timer/last", time.Now().String); err != nil{
    	fmt.Println(err)
    return
	}
	if getResp, err = kv.Get(context.TODO(), "/timer/last"); err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(getResp.Kvs, getResp.Count)
	}

}