前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周小结】2023-Week6

【每周小结】2023-Week6

作者头像
junedayday
发布2023-02-18 16:42:00
2780
发布2023-02-18 16:42:00
举报
文章被收录于专栏:Go编程点滴Go编程点滴

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

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

Go技巧 - 浅谈1.20版本特性

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

切片转数组

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

代码语言:javascript
复制
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版本引入了开发者最常用的时间戳格式:

代码语言:javascript
复制
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类型,则可以将两个错误组合起来,上层判断时两个都成立。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go编程点滴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go技巧 - 浅谈1.20版本特性
    • 切片转数组
      • unsafe三个新函数
        • 时间常量的定义
          • error的组合
            • 其它
              • 小结
              • 编程思考 - 对成长来说,划分边界是为了扩大边界
              • 工作生活 - 学习一些营养学知识
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档