在 Go 1.13 中处理错误(翻译)
Working with Errors in Go 1.13
Damien Neil and Jonathan Amsterdam
17 October 2019
介绍
Go 将 error 作为 values 已经很好的为我们服务了数十年。尽管标准库对 errors 的支持很少——只有errors.New和fmt.Errorf函数,会产生只包含消息的 errors——内置的 error interface 允许 Go 程序猿添加他们想要的任何信息。它所需要的只是实现一个Error方法:
1 | type QueryError struct { |
像这样的 Error 类型无处不在,而且他们存储的信息千差万别,从时间戳到文件名到服务器地址。通常,该信息包括另一个较低级的 error 以提供额外的上下文。
Errors are values(翻译)
原文:https://go.dev/blog/errors-are-values
Errors are values
Rob Pike
12 January 2015
Go 程序猿之间经常讨论的点,特别是那些新进使用 Go 的人,就是如何处理 errors。对话经常会转变为对以下程序出现次数的哀叹:
1 | if err != nil { |
错误处理与 Go(翻译)
原文:https://go.dev/blog/error-handling-and-go
错误处理与 Go
Andrew Gerrand
2011 年 7 月 12 日
介绍
如果你写过任何 Go 代码,你可能会遇到内置的 error 类型。Go 代码使用 error 值来表明不正常的状态。例如:os.Open 函数在他打开文件失败时会返回非空的 error。
1 | func Open(name string) (file *File, err error) |
以下代码使用 os.Open 去打开一个文件。如果发生了错误他会调用log.Fatal去打印错误消息和停止。(log.Fatal 会调用 os.Exit())
1 | f, err := os.Open("filename.ext") |
你可以在 Go 中用知道的关于这个 error 类型来完成很多工作,但是本文我们会仔细看看 error 和讨论在 Go 中错误处理的一些良好实践。
Raft(翻译)
为什么要自己翻译文章?
如今一般的编程资料都会有中文版本,特别是出了一段时间且普及程度比较广泛的资料,几乎一定会有中文版本,那么我们为什么要自己去读英文原文,自己翻译呢?我自己思考如下:
- 翻译质量参差不齐,无法保证全篇都是高质量的翻译,难免会有错漏之处,阅读原文可以更好的理解作者的意思
- 第一时间没有中文资料的时候,一定是会去读英文原文的文档的
- 日积月累,提升自己的阅读能力
即使译者可以保证通篇都是高质量的译文,但是在实际工作中还是难免需要阅读英文文档,需要一定的阅读能力,在平时自己翻译一些文档刚好可以提升一下自己的阅读能力。
以上。
Go 内存模型(翻译)
约定:
- 普通的小括号是我认为原文应该要加入括号中翻译的,属于原文的一部分,也有部分我觉得可能翻译的不够准确会放入英文原文
- 小括号中带 ta(translator add) 的表示译者认为应该添加可以帮助更好的理解的
- 某些单词可能不翻译更有原来的味道,比如 channel,也没必要一定要翻译成中文通道
The Go Memory Model
2014年3月的版本
介绍
Go 内存模型指定了以下情形可以被保证:在一个协程中读取一个变量可以观察到由不同协程写入同一个变量所产生的值。
建议
由多个协程同时修改数据的程序必须串行(ta:serialize,个人理解应该是串行而不是序列化)这种访问。
为了串行访问,使用 channel 操作或者其他同步原语(例如在 sync 和 sync/atomic 包中的)保护数据。
如果您为了理解您的程序行为(ta: 协程并发行为)一定要阅读此文档的剩余部分,那您真的是太明智了。
不要耍小聪明(Don’t be clever)。
用到的命令,防忘
前言
不全的记录,只是有一些命令还不是很熟,记录下来备查
k8s 快捷键
将本地端口映射到 k8s 对应 pod:kubectl -n namespace port-forward authsv-7cfc56d85d-v24pb 9999:9090,-n 命名空间,9999 本地端口,9090 远程端口
实时打印 pod 日志:
1
kubectl -n namespace logs authsv-6f5f544d75-qgw6g authsv --tail 10 -f
获取定时任务列表:kubectl -n namespace get cronjob
删除节点:kubectl -n namespace delete xxx
进入容器执行 shell 命令:kubectl -n namespace exec pod -it sh
k8s 定时任务,没有秒
1 | # ┌───────────── 分钟 (0 - 59) |
有趣的启动Vim的方式
同事用的是 emacs 开发,每次使用 ec 命令时都会弹出一首唐诗,觉得挺有意思的。于是咨询了一下,使用的是 fortune 和阮一峰大神整理的两个 tang300 的数据文件。
于是在 .zshrc 中编写了一个 vim 代码,让 vim 在启动时也会弹出一首唐诗:
1 | alias v=av |
小结
很久没写过技术类的文章了,最近打算重新拾起来,以前写的虽然比较浅,但是毕竟也记录了自己成长的过程,所以还是都放到这个博客上。后续写的可能更多的会和 go、java 相关,以上。
2021-10-28 09:05:05