如下所示:
Txn().If(cond1, cond2, ...).Then(op1, op2, ...,).Else(op1, op2)
上面的实现其实很好理解,如果 If 冲突判断语句为真,对应返回值为...冲突判断(If)和执行过程 Then/Else作为一个原子过程来执行 If-Then-Else,因此 etcd 事务不会发生阻塞,无论成功还是失败都会返回,当发生冲突导致执行失败时,需要应用进行重试。...(etcd *v3.Client, sender, receiver string, amount uint) error {
// 失败重试
for {
if ok, err := doTxn...{
return nil
}
}
}
func doTxn(etcd *v3.Client, sender, receiver string, amount uint) (bool, error...senderKV.Value), toUInt64(receiverKV.Value)
// 验证账户余额是否充足
if senderNum < amount {
return false, fmt.Errorf("资金不足