本周开始,绝大多数人的工作与生活步入了常规模式。
希望大家的身体与心理都能尽快地适应工作或学习节奏,保持一颗愉悦的心情。
本周Go
语言1.20版本正式发布,我们对其重要特性进行简单分析,为后续掌握Go
的发展脉络做好铺垫。
在1.17版本时,切换转数组的语法已经支持,只是写起来比较冗余。在这次1.20版本进行了优化:
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中提供了三个新函数:SliceData
、String
和StringData
。
这三个函数是低频使用的,我们按需阅读官方文档即可。如果你对指针的相关知识基础扎实,很容易理解这三个函数。
终于,在1.20版本引入了开发者最常用的时间戳格式:
const DateTime = "2006-01-02 15:04:05"
经历了多少次手写时间,查找了多少个相关的低级bug,官方终于把这个时间格式放到了标准库中。强烈建议升级到1.20版本的项目,先做一次变量的全局替换。
这里分享一个小tip:如何记忆这个时间戳?记住1~6:
标准库中的error
支持了组合的能力,扩展了错误的使用场景。
例如,程序发生了错误,从开发者来看,既有属于数据库的错误A,又有属于业务逻辑的错误B。在上层用errors.Is
判定时,只能在A与B中二选一。而1.20则引入了Join
类型,则可以将两个错误组合起来,上层判断时两个都成立。
var errA error
var errB error
// 组合错误
var err = errors.Join(errA, errB)
Comparable
更多的支持Go
后续支持各操作系统的计划从近几个版本的迭代来看,Go
官方一直关注前后版本兼容性,这对开发者来说体验是很棒的。官方把主要精力花在了两个方面:
可见,Go
团队通过前期的设计,帮助我们屏蔽了下层的细节,是一个很棒的编程体验。
在编程开发中,有许多划分边界的事情,如:
划分边界后就有了分工,优秀的分工协作可以带来组织效率的提升。但是,随着日复一日的重复性工作,很容易就只专注于自己职责范围内的部分,而忽略了相关方。近几年,许多公司倡导的 “跳出当前角色”、“共赢思想”、“FT-Feature Team” 等词汇,都是一种跨出当前工作内容、与周边其余组织团队合作的思想。
我们要从更高的视角来理解:划分边界是为了整体实现更高价值的一种方法,而不是成为一种阻碍。所以,我们要不断地跨出当前职责,比如:
从许多大厂的职级定义来看,职级的提升往往就是边界的扩大 - 从单个服务、一个系统、整套业务,最后甚至要有跳出技术的视角。
最近看了《你是你吃出来的》和《你是你吃出来的2》两本书。书的内容涉及到许多健康、医学相关的内容,作者的文笔已经很通俗易懂了,有兴趣的朋友可以自己去看看。
对书中的例子要保持理性: 比如某患者听了作者的说法,换了食谱,三个月后就恢复了。但是,三个月内其余因素是否有变化?比如吃了药、加强锻炼、心态变化等。
读完本书,我有个观点一直萦绕心头:高血压、糖尿病等这种亚健康的情况,是很难定义边界的。虽然业内有参考值,但很容易因人种、环境等因素而变化,颇为个性化。而我们称它们为“病”,往往是已经严重到远超临界值了。对于这些情况,吃药就像是亡羊补牢 - 虽然有效果,但很难根治。我相信,大众更需要的是营养学知识的普及。
目前,绝大多数人很难有专属的家庭医生,这就要求每个人都拥有基础的营养学知识储备。相关的理论知识已经很完善了,但当前社会缺少一个权威的宣传路径,把这块知识普及到大众。
个人觉得像公众号、抖音视频等,由于整个传播路径上干扰信息过多,但很难具有公众说服力。而类似于 国家反诈中心 这种独立app更具有权威效应。
Github: https://github.com/Junedayday/code_reading Blog: http://junes.tech/ Bilibili: https://space.bilibili.com/293775192 公众号: golangcoding