🌓

每周一个设计模式-开篇

对于设计模式的内容,之前有从书上了解过,但是纸上得来终觉浅,总感觉学过之后那一段是是理解了,随着时间的流逝,知识渐渐被淡忘,自己仍然扎在一堆“烂”代码中,无组织结构可言。反观自己的技术栈,还真的没有接触过一门纯正的面向对象语言,譬如 Java。

阅读全文

初探 go-micro 微服务框架

最近想了解下微服务,我们项目中目前还是单体服务,服务间的调用也都是通过 http 进行通信的,但这并不妨碍我们对微服务的好奇心,之前有听过几个微服务框架的名字,B站的 Kratos,字节的 Kitex,好未来的 go-zero 等等,但这几个并不是本篇的主题。具体哪个微服务框架并不重要,主要就是借着这个机会了解一下微服务相关的内容。

阅读全文

博客升级 内容提炼

趁着周末把博客折腾了一番,主要改了两个东西:

  • 将博客内容托管到 Github
  • 调整为自动化部署,简化发布流程

阅读全文

刷题还是挺有意思的

有些时日没有坐在电脑前,舒舒服服的敲会字了。虽然最近没更新文章,但是也有在努力学习。

阅读全文

misuse init func

今天这篇讲的是 init 函数使用技巧,平时在人家封装好的代码框架中进行开发,很少独立用到 init 函数的地方,其实不小心使用的话坑还是比较多的。

  • 一个包中能不能拥有多个 init
  • init 与全局变量的初始化哪个先执行
  • 一个包被导入多次 init 是否会执行多次

阅读全文

Variable shadowing

本文中的内容来自《100 Go Mistakes and How to Avoid Them》,作者总结了常见、易犯的错误,比较适合刚学习 Go 的同学。

这个问题我最开始实习的时候还真遇到过,不过经历一次之后就记住了。主要问题在于对变量作用域以及 := 的理解:

var client *http.Client
if tracing {
// 这个 client 是一个新的变量
client, err := createClientWithTracing()
if err != nil {
return err
}
// 如果这里不打印的话,会报 declared but not use 的错误
log.Println(client)
} else {
client, err := createDefaultClient()
if err != nil {
return err
}
log.Println(client)
}
// Use client

阅读全文

根管治疗+全瓷冠

从小就是牙口不好,小时候家里对这方面也没有过多关注过,自己也不注重口腔健康,当时爽了,现在完蛋了。

不仅钱花得多,还非常的折腾。

我是清明节回家补了一颗龋齿(蛀牙),那天补牙的时候,突然有一下特别疼(就是那个感觉一瞬间就布遍全身,我感觉不咋疼),医生在那一顿叹气,哎呀,露神经了,这就不好弄了。

阅读全文

Go 内存分配器

梳理 Golang 内存分配器,以前通过代码调试过,有了一个初步的认识,这次把一些细节性的东西都梳理出来了,发现自己对内存分配的过程有了更清晰的认识,很多内容靠脑子想还是太费事了,就咱这个“处理器”差一点就烧坏了.. 把图画出来能够有效的缓解大脑负载..

阅读全文

go error handling

这篇文章是我学习董哥发布的 错误处理 文章的总结,好记性不如烂笔头,避坑啦!

阅读全文

参数是怎么传给 goroutine 的

go version: 1.16

文章内容接之前的 variable shadowing 做了一些延伸,在批量创建 goroutine 时,避免不了参数传递,通常的做法如下:

for i := 0; i < 10; i++ {
go func (i int) {
println(i)
}(i)
}
// wait all g done

阅读全文

go generic

go 泛型学习,距离泛型的发布已经有很长一段时间了,之前大概看了下官方文档,说有些东西可能将来都会改变,不保证向前兼容,就没有具体了解,1.18也发了几个版本了,感觉再不努力又要被小伙伴们卷完了。

阅读全文

go context

这两天在看 Context 的最佳实践,在项目中有用到这个东西,但是又没有实际起作用,只是单纯的作为一个参数传来传去。这篇文章的目的就是学会使用 Context 以及阅读 Context 部分源码实现,还有在使用时需要注意的事项。

阅读全文

2021 年末总结

2021 已经过去半个月的时间了,看了很多前辈的总结,大家进步的都好快.. 突然想起来曹大的 Bio If you don't keep moving, you'll quickly fall behind.

阅读全文

Weekend

为了听键盘按键声音(全键都是 35 g 的,今天给键盘搞了个增压弹簧,非字母键位都加了 10 g),迫不得已写篇周记,记录下这周点滴。

阅读全文

timer 优化

我们已经知道了,老版本 timer 的性能瓶颈主要是在那把全局锁以及频繁的上下文切换上,今天我们看看 go 大佬们通过哪种方式进行优化的。

在这里解释一下为什么选择这几个版本,据我所知,从 1.10 版本以前都是像上一篇文中所描述的那样,在 1.10 版本开始就做了这个优化,但从 1.14 开始又对 timer 进行了优化,所以我选择了 1.8, 1.13, 1.14 这几个邻近的作为参考。

阅读全文