1 介绍
我们使用etcdctl 模块的main.go 的put命令可以向etcd服务put一个值,先看一下如何操作,
cd etcdctl 进入etcdctl 目录,然后执行如下命令,即可put 一个值到Etcd
go run main.go put mykey "this is Hellox"
2 打开etcdctl目录下的main.go查看执行过程
func main() {
apiv := os.Getenv(apiEnv)
// unset apiEnv to avoid side-effect for future env and flag parsing.
os.Unsetenv(apiEnv)
if len(apiv) == 0 || apiv == "3" {
ctlv3.MustStart()
return
}
if apiv == "2" {
ctlv2.MustStart()
return
}
fmt.Fprintf(os.Stderr, "unsupported API version: %v\n", apiv)
os.Exit(1)
}
3、点击ctlv3.MustStart(),此时函数所在的包是ctlv3
func MustStart() {
if err := Start(); err != nil {
cobrautl.ExitWithError(cobrautl.ExitError, err)
}
}
4、点击 Start();
func Start() error {
rootCmd.SetUsageFunc(usageFunc)
// Make help just show the usage
rootCmd.SetHelpTemplate(`{{.UsageString}}`)
return rootCmd.Execute()
}
5、点击rootCmd.Execute(),真正执行我们输入的命令,这里etcdctl引入了Cobra库
Cobra是用于创建强大的现代CLI应用程序的库
func (c *Command) Execute() error {
_, err := c.ExecuteC()
return err
}
6、里面还有几层调用都是Cobra,就不一一例举了,这里对调用过程截一下图
7、最后我们进入 putCommandFunc 方法看一下,将获取的key 和value ,并通过client调用put接口,这里应该是Client封装了Grpc,不是今天主要的研究对象,就不再继续了,到此结束。
// putCommandFunc executes the "put" command.
func putCommandFunc(cmd *cobra.Command, args []string) {
key, value, opts := getPutOp(args)
ctx, cancel := commandCtx(cmd)
resp, err := mustClientFromCmd(cmd).Put(ctx, key, value, opts...)
cancel()
if err != nil {
cobrautl.ExitWithError(cobrautl.ExitError, err)
}
display.Put(*resp)
}