Go 使用管道连接 Command 在 posix 系统中,我们可以使用 | 来连接两个命令,从而将前一个命令的标准输出作为后一个命令的标准输入,就像下面这个例子一样 1ls | grep go 我们首先使用 ls 命令获取到当前目录的文件,然后将输出传递给 grep 命令,从文件列表中过滤带有 go 的文件。 那么我们可以在 Go 实现类似管道的操作吗,将多个 Cmd 连接起来。答案是可以的,并且十分的简单,只需使用标准库的能力 2024-01-23 #Go
搭建一个 Gemini 聊天网页 Google 发布了新的 Gemini Pro 模型,一个对标 openAI 的产品。我们除了可以通过使用英文版的 Bard 来尝试这个新的模型,也可以通过 Google AI 实验室来构建自己的 AI 应用。 在这篇文章中,我记录了如何搭建一个属于自己的聊天机器人。 事前准备: 1. 需要能够访问 Google,并且拥有 Google 账户。 2. docker 环境 首先,登录 Google 2024-01-12 #日常
MySQL 事务隔离 事务用来保证一组数据库操作,要么一起成功,要么一起失败。不存在一部分操作成功,另一部分操作失败的情况。 最常见的例子就是银行的转账。当小明需要给小红转 100 元时,首先需要检查小明的账户是否有足够的余额,然后将小红的余额增加 100,更新小明的余额。在这个例子中,整个操作必须同时成功或者失败,不能出现小红的余额增加了 100,小明的余额却没有减少 100 的情况。 MySQL 的事务支持是在引擎 2023-12-28 #MySQL
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