bobbyz3g
  • 首页
  • 归档
  • 标签
  • 关于

Go 错误是值

本文是对 Rob Pike 博客 Errors are values 的翻译。 在 Go 中,经常可以看到关于错误处理的讨论。在讨论的过程中,对话通常会演变成对语句 123if err != nil { return err} 出现次数的哀叹。我们最近扫描了我们能找到的所有开源项目,发现这个代码段在每一页只出现过一两次,比一些人让你相信的要少。不过,如果人们仍然认为你必须
2023-12-25
#Go

Go 使用 deadcode 查找无法访问的函数

这篇文章是对 Go 官方博客 Finding unreachable functions with deadcode 的翻译 项目源代码中存在但在任何执行过程中都无法访问的函数被称为“死代码”,会对代码库维护工作造成负担。今天,我们很高兴与您分享一个名为 deadcode 的工具,帮助您识别这些死代码。 12345$ go install golang.org/x/tools/cmd/deadco
2023-12-20
#Go

TLA+ 算子和值

算子在 TLA+ 中, 算子 (operator) 就是编程语言中的函数。它们接受参数并求值为表达式。 123EXTENDS IntegersMinutesToSeconds(m) == m * 60 算子可以接收任意数量的参数. 没有默认值, 重载或者是可选参数. 如果一个算子接收两个参数, 那么就必须传递两个参数. 如果一个算子不接受参数, 那么可以写成没有参数的形式. 在这种情况下, 它就
2023-12-12
#TLA+

Go 限制函数参数

假设我们现在正在编写一个提供给外部使用的函数名 Fn 123func Fn(a int) { // do something} Fn 接受一个 int 型的值,要求 a 只能是 1, 3 ,5 其中的一个,该如何去限制呢。 最简单的方式就是增加一段判断,在不符合要求时返回错误,就像下面这样。 123456789func IPAddr(a int) error {
2023-11-30
#Go

TLA+,概念初识

假设我们正在为银行构建一项电汇服务。用户可以向其他用户进行转账。作为要求,我们不允许任何可能使用户账户透支或余额降至零以下的转账。在高层次上,代码可能如下所示: 1234def transfer(from, to, amount) if (from.balance >= amount) # guard from.balance -= amount; # withdraw to.ba
2023-11-29
#TLA+

解构类型参数

这篇文章是对 Go 官方博客 Deconstructing Type Parameters 的翻译. 所使用的 Go 版本为 1.21. Slice 包的函数签名slice.Clone 函数非常的简单,它复制了任何类型的 slice 123func Clone[S ~[]E, E any](s S) S { return append(s[:0:0], s...)} 上
2023-11-22
#Go

commands out of sync. Did you run multiple statements at once?

Go 的 mysql 驱动库 github.com/go-sql-driver/mysql 在连接数据库时,有时会产生一个奇怪的错误 1"commands out of sync. Did you run multiple statements at once?" 这个错误的字面意思是同一时刻执行了多个 SQL 语句。咋看上会让人感到很迷惑,特别是这个错误有可能发生在数据建立
2023-11-16
#MySQL #Go

raft 日志复制

在上一篇的内容中,我们学习了 raft 的 Leader 选举。在这一篇中,我们将学习 raft 的日志复制。 在 raft 算法中,副本数据是以日志(Log)的形式存在的。在收到来自客户端的信息后,Leader 会复制日志到 Follower,并 Apply 到状态机。 日志是什么日志是由日志项组成的,每个日志项代表一条数据操作命令。 日志项的格式分为三个部分,分别是 Index: 日志项的索
2023-11-13
#raft

raft Leader 选举

raft 协议是当前分布式系统开发的首选共识算法。raft 协议是一个一切以领导者为主,实现一系列值的共识和节点日志的一致性。 raft 协议将共识问题拆分成三个子问题 Leader 选举,Leader 故障后集群能快速选出新 Leader; 日志复制, 集群只有 Leader 能写入日志, Leader 负责复制日志到 Follower 节点,并强制 Follower 节点与自己保持相同; 安
2023-11-08
#raft

声明式 API

声明式 API 是一种软件设计理念和做法,它要求用户描述他们想要达到的目标状态,由服务自身去令系统达到目标状态。 在声明式 API 中,用户不需要关心系统内部的实现细节,只需要描述他们想要的结果即可。这使得声明式 API 更加易于理解和使用,也更容易维护和扩展。 声明式 API 与命令式 API 的区别在于,命令式 API 要求用户描述一系列的动作,这些动作如果被正确的顺利执行,最终结果是系统达到
2023-11-07
#k8s
1234…8

搜索

Hexo Fluid