Junedayday Blog

六月天天的个人博客

0%

【每周小结】2023-Week6

本周开始,绝大多数人的工作与生活步入了常规模式。

希望大家的身体与心理都能尽快地适应工作或学习节奏,保持一颗愉悦的心情。

Go技巧 - 浅谈1.20版本特性

本周Go语言1.20版本正式发布,我们对其重要特性进行简单分析,为后续掌握Go的发展脉络做好铺垫。

切片转数组

在1.17版本时,切换转数组的语法已经支持,只是写起来比较冗余。在这次1.20版本进行了优化:

1
2
3
4
5
6
7
8
9
10
var x []byte

// 更早版本 - 手工填充
var s = [4]byte{x[0],x[1],x[2],x[3]}

// Go1.17 - 指针操作
var s = *(*[4]byte)(x)

// Go1.20 - 直接类型转换
var s = [4]byte(x)

这个语法本身没有太多的学习成本,但官方在此时才完全支持,这就导致:在1.17版本前的绝大多数开发场景下,Go开发者都更愿意用更灵活的切片来代替数组。但相较于切片,固定长度的数组对节约内存更为友好。

而随着1.20版本的推出,使用数组的语法便利性大幅提高,相信会有更多追求极致性能的人开始引入数组。

unsafe三个新函数

unsafe中提供了三个新函数:SliceDataStringStringData

这三个函数是低频使用的,我们按需阅读官方文档即可。如果你对指针的相关知识基础扎实,很容易理解这三个函数。

时间常量的定义

终于,在1.20版本引入了开发者最常用的时间戳格式

1
const DateTime   = "2006-01-02 15:04:05"

经历了多少次手写时间,查找了多少个相关的低级bug,官方终于把这个时间格式放到了标准库中。强烈建议升级到1.20版本的项目,先做一次变量的全局替换。

这里分享一个小tip:如何记忆这个时间戳?记住1~6:

  • 1月
  • 2日
  • 下午3点
  • 4分
  • 5秒
  • 06年

error的组合

标准库中的error支持了组合的能力,扩展了错误的使用场景。

例如,程序发生了错误,从开发者来看,既有属于数据库的错误A,又有属于业务逻辑的错误B。在上层用errors.Is判定时,只能在A与B中二选一。而1.20则引入了Join类型,则可以将两个错误组合起来,上层判断时两个都成立。

1
2
3
4
5
var errA error
var errB error

// 组合错误
var err = errors.Join(errA, errB)

其它

  • 更新结构体比较的规范的说明(严格来说是修正了不严谨的说明,代码已经实现)
  • 泛型类型对Comparable更多的支持
  • Go后续支持各操作系统的计划
  • 相关工具链的优化
  • 编译速度提升,达到差不多引入泛型前的水平
  • 运行时提升CPU效率约2%

小结

从近几个版本的迭代来看,Go官方一直关注前后版本兼容性,这对开发者来说体验是很棒的。官方把主要精力花在了两个方面:

  1. 相关工具与库的建设,完善基本开发的生态
  2. 底层能力(如编译)的建设

可见,Go团队通过前期的设计,帮助我们屏蔽了下层的细节,是一个很棒的编程体验。

编程思考 - 对成长来说,划分边界是为了扩大边界

在编程开发中,有许多划分边界的事情,如:

  1. 代码的模块划分
  2. 微服务的划分
  3. 业务领域的划分
  4. 网络的分层

划分边界后就有了分工,优秀的分工协作可以带来组织效率的提升。但是,随着日复一日的重复性工作,很容易就只专注于自己职责范围内的部分,而忽略了相关方。近几年,许多公司倡导的 “跳出当前角色”、“共赢思想”、“FT-Feature Team” 等词汇,都是一种跨出当前工作内容、与周边其余组织团队合作的思想。

我们要从更高的视角来理解: 划分边界是为了整体实现更高价值的一种方法,而不是成为一种阻碍。所以,我们要不断地跨出当前职责,比如:

  • 了解某个模块的依赖方 - 如学习ORM库时,顺便了解一下数据库的基本知识
  • 主动了解周边服务 - 如做支付系统时,了解订单系统的设计与交互

从许多大厂的职级定义来看,职级的提升往往就是边界的扩大 - 从单个服务、一个系统、整套业务,最后甚至要有跳出技术的视角。

工作生活 - 学习一些营养学知识

最近看了《你是你吃出来的》《你是你吃出来的2》两本书。书的内容涉及到许多健康、医学相关的内容,作者的文笔已经很通俗易懂了,有兴趣的朋友可以自己去看看。

对书中的例子要保持理性:

比如某患者听了作者的说法,换了食谱,三个月后就恢复了。但是,三个月内其余因素是否有变化?比如吃了药、加强锻炼、心态变化等。

读完本书,我有个观点一直萦绕心头:高血压、糖尿病等这种亚健康的情况,是很难定义边界的。虽然业内有参考值,但很容易因人种、环境等因素而变化,颇为个性化。而我们称它们为“病”,往往是已经严重到远超临界值了。对于这些情况,吃药就像是亡羊补牢 - 虽然有效果,但很难根治。我相信,大众更需要的是营养学知识的普及。

目前,绝大多数人很难有专属的家庭医生,这就要求每个人都拥有基础的营养学知识储备。相关的理论知识已经很完善了,但当前社会缺少一个权威的宣传路径,把这块知识普及到大众。

个人觉得像公众号、抖音视频等,由于整个传播路径上干扰信息过多,但很难具有公众说服力。而类似于 国家反诈中心 这种独立app更具有权威效应。

Github: https://github.com/Junedayday/code_reading

Blog: http://junes.tech/

Bilibili: https://space.bilibili.com/293775192

公众号: golangcoding

二维码