Сравните и поменяйте местами в etcd v3?

Я пытаюсь выполнить операцию сравнения и сохранения данного ключа, используя Go-клиент etcd для v3 API. Видя, что --swap-with-value кажется, ушел из etcdctl putЯ подозреваю, что в клиентской библиотеке нет соответствующего метода или аргумента. Таким образом, я пытаюсь сделать собственную реализацию:

res, err := etcdv3.KV.Txn(context.Background()).If(
    etcdv3.Compare(etcdv3.ModRevision(c.path), "=", c.modRevision),
).Then(
    etcdv3.OpPut(c.path, string(data)),
    etcdv3.OpGet(c.path),
).Commit()

if err != nil {
    return err
}
if !res.Succeeded {
    return fmt.Errorf("A newer revision exists.")
}

// Return the current `ModRevision` on success.
return res.Responses[1].GetResponseRange().Kvs[0].ModRevision

Однако Go отказывается компилировать это сообщение:

main.go:55: not enough arguments in call to method expression clientv3.KV.Txn
    have ("context".Context)
    want (clientv3.KV, "github.com/miguel/myproject/vendor/golang.org/x/net/context".Context)

Что не так с этим подходом? Почему Go отказывается компилировать этот фрагмент?

Редактировать: Благодаря JimB я узнал, что etcdv3 импортирует старый golang/x/net/context пакеты. Я переключил import заявления, но я все равно получаю нечто подобное:

main.go:55: not enough arguments in call to method expression clientv3.KV.Txn
    have ("github.com/miguel/myproject/vendor/golang.org/x/net/context".Context)
    want (clientv3.KV, "github.com/miguel/myproject/vendor/golang.org/x/net/context".Context)

0 ответов

Другие вопросы по тегам