[翻译]Go高效错误处理

翻译自: https://earthly.dev/blog/golang-errors/

Go语言的错误处理与其他语言(Java、JavaScript、Python)主流编程语言有些不一样。Go内置errors并不包含

堆栈信息,也不支持常规的try/catch处理方式。相反,Go语言中的errors可以被函数返回,也能如其他数据类型一样进行处理—-这就导致了error是一种轻量、简单的设计。

GIT-说点不一样的东西

我们知道git是一个分布式版本控制系统,本地目录.git/objects/扮演着数据库(键值对数据库)的角色,里面有blobtreecommittag类型,每一次提交保存的都是完整数据的一次快照。而我一直好奇的有两个点:一是这个全量数据中会记录authorcommit time等信息吗?二是像git cherry-pickgit rebase这些指令可以将某一次提交的改动作为操作单元是如何实现的,按照blob的定义,每一次commit也是保存的全量数据呀。

认识GO语言url.URL结构体

在日常编码中,我曾不止一次对于go语言的url.URL结构中OpaqueRawPath字段含义产生过疑义,不知其有何意义。 比如如下代码

1
2
uStr := "http://root:password@localhost:28080/home/login?id=1&name=foo#fragment"
u, _ := url.Parse(uStr)

Mac本地学习K8s

本文来自于要将国内的一个项目迁移到海外,剥离国内公司域内的各种依赖,海外环境提供k8s部署环境,因此需要学习k8s。 本地学习k8s最好方式就是在本地搭建一个minikube集群,mimikube提供了全套的kubectl命令支持,功能十分强大,此文章记录其中比较重要的命令,以备查询

文章资料来源于官网https://minikube.sigs.k8s.io/docs/start/

GO闭包实现底层分析

闭包函数是指引用了自由变量的函数,如下

1
2
3
4
5
6
func create() func() int {
	c := 2     // 自由变量
	return func() int {
		return c  // 引用了自由变量
	}
}

Go Asm

本文最初是在公司内部小组技术分享

为什么想分享这个知识点

  • 经常性在阅读GO源码时,会追溯到底层的汇编实现,如果不理解,就会懵逼了
  • 网上大量的大神在分析某个特性或者实现时,常常都会祭出底层汇编,这也说明,要明白GO底层的很多设计,都必须要了解GO汇编
  • 性能优化,代码分析所需,虽然这种情况很少
  • 了解底层实现,充实自己的武器库
  • 具备部分辩伪能力,学习了GO汇编,多少会对语言特性的底层实现有一些嗅觉
  • 装逼,装逼是第一生产力

Go Benchmark理解

前言

go语言本身提供了基准测试的支持,基准测试有以下要求

  • 文件以_test.go结尾
  • 基准测试函数以Benchmark开头
  • 函数参数为*testing.B 类型,无返回值