Skip to main content

1月1日内容汇总

· 11 min read
加菲猫

📒 相关文章推荐

一个关于 useEffect 的可视化指南 — 奇怪的是,最受欢迎的文章出现在 2022 年的第一期中。作者创建了一系列 React 渲染的可视化指南文章(比如关于 useMemo 和 props 的文章),在这篇文章中他把注意力转向了 useEffect。如果你想了解更多,还有一个关于 头等函数如何工作的可视化演示

https://alexsidorenko.com/blog/useeffect/

我们能承认 React Hooks 是个坏主意吗? — 第二受欢迎的项目是一个“快速链接”,但这个话题有足够的争议,让很多人谈论!Amy 认为“React Hooks 是个坏主意”。不管你喜不喜欢,你都会有自己的看法

https://medium.com/codex/can-we-all-just-admit-react-hooks-were-a-bad-idea-c48120c5188d

2022 React 库 — React 生态系统已经变得如此之大,问题更多的是选择太多,而不是没有需要的东西。如果您正在为一个新项目选择库,那么这个列表(Robin 多年来一直在更新)仍然很有用。希望我们能看到 2023 年的版本

https://www.robinwieruch.de/react-libraries/

回顾 2022 的 React 趋势 — 在今年年初,作者看了看他认为 2022 年重要的事情。他在 Remix、服务端渲染、并发渲染和行为测试方面做得很好,这些都是今年讨论最多的话题

https://www.chakshunyu.com/blog/what-you-should-definitely-look-out-for-in-react-in-2022/

Awesome React Components:一个精心整理的组件清单

https://github.com/brillout/awesome-react-components

React Render Tracker:发现有关意外重渲染的性能问题 — 这个工具可以显示组件树状态随时间变化的差异,这样您就可以更好地研究发生了什么

https://github.com/lahmatiy/react-render-tracker

Plasmo:“它就像浏览器扩展的 Next.js” — 一个面向 React 和 TypeScript 的框架,用于构建您自己的浏览器扩展

https://github.com/PlasmoHQ/plasmo

<ClickToComponent />:快速跳转到组件源代码

https://github.com/ericclemmons/click-to-component

要避免的 10 个 React 反模式 — 一个精心呈现的 8 分钟视频,快速介绍了各种替代的更优方法(或至少值得斟酌)

https://www.youtube.com/watch?v=b0IZo2Aho9Y

📒 Golang 相关文章

Go 1.18 新增三大功能之一“模糊测试”使用方式

Go 1.18 新增三大功能之一“泛型”怎么使用

Go 语言开源项目使用的函数选项模式

Go 语言 context 最佳实践

Go 语言 errgroup 库的使用方式和实现原理

Go 语言一次性定时器使用方式和实现原理

  • new:为变量分配存储空间,返回指针类型,一般不常用
  • make:为复合数据类型(slicemapchan)分配存储空间

在 Go 语言中,原生类型都有默认值,即类型的零值

  • 布尔型的零值:false
  • 整型的零值:0
  • 字符串类型的零值:""
  • 指针、函数、接口、Slice、Map、Channel 的零值:nil

需要注意的是,Go 语言类型的零值初始化是递归完成的,即 数组结构体 的每个元素都进行零值初始化。

在 Go 语言中,推荐定义零值可用的结构体,不仅对程序的安全性和正确性非常重要,它还可以无需预先显式初始化即可直接使用,使 Go 程序代码更优雅。

Go 语言为什么建议定义零值可用的结构体

总结一下,短变量声明在同一作用域内重复使用,只是重新赋值,不会重新创建变量(即指针还是同一个),但是如果在不同作用域(例如 if 语句块),就会创建一个新的变量(内存地址与之前不同)。

Go 语言怎么解决编译器错误“err is shadowed during return”

Go 语言怎么处理三方接口返回数据

Go 语言使用 goroutine 运行闭包的“坑”

Go 语言内存逃逸案例

Go 语言逃逸分析

Go 语言怎么使用变长参数函数

Go 语言错误处理为什么更推荐使用 pkg/errors 三方库

Go 项目使用 Makefile

Go 应用程序设计标准

Go 语言整洁架构实践

Go 语言怎么使用 Docker 部署项目

Golang 语言怎么打印结构体指针类型字段的值

Golang 语言怎么避免空指针引发的 panic

Golang 语言该用命名返回值吗

总结一下:

  • unsafe.Pointer 主要用来实现 指针类型转换,任意指针类型 *T 都可以转换为 unsafe.Pointerunsafe.Pointer 可以转换为任何类型的指针值 *T
  • uintptr 主要用来实现 指针运算,实际是数值类型,可以用于存储内存地址。将 unsafe.Pointer 转换为 uintptr,然后使用 uintptr 值进行算术运算,最后将运算结果 uintptr 值再转换为 unsafe.Pointer

Golang 语言中的非类型安全指针

显式类型转换:

// 整型变量省略类型,编译器根据字面量推导默认是 int
var a = 100
a := 100

// 如果需要声明指定类型的整型变量,也可用显式类型转换,例如:
var a = int8(100)
b := int8(60)

变量声明块:

var (
a int = 100
b int = 200
)

var (
c = 300
d = 3.14
f = true
)

var (
e, f, g int = 10, 20, 30
h, i, j string = "a", "b", "c"
)

Golang 语言的多种变量声明方式和使用场景

Golang 语言中的内置函数 make 和 new

深入理解 go reflect - 反射基本原理

go interface 设计与实现

go Context 设计与实现

深入理解 go unsafe

📒 天呐!我用 go 从零开始写了一个 k8s 应用管理工具(附完整代码和开发过程)

⭐️ 没想到在 Docker 容器中设置时区这么简单

📒 先聊聊「内存分配」,再聊聊Go的「逃逸分析」

📒 字节一面:服务端挂了,客户端的 TCP 连接还在吗

📒 详解全网最快Go泛型跳表【内附源码】

📒 2022年Go语言盘点:泛型落地,无趣很好,稳定为王

📒 【第2824期】图解浏览器的多进程渲染机制

📒 在 Docker build 环境持久化 node_modules 目录

想在 docker build 环境中持久化 node_modules 需要使用到 BuildKitmount 功能,该功能有几个前置条件:

  • docker 版本必须高于 18.09
  • BuildKit 需要手工启用,可在 docker build 命令前添加环境变量 DOCKER_BUILDKIT=1 启用
  • 如果前两个条件不满足,则需要具备 Jenkins 和构建机的读写权限,以调整构建环境参数
  • 修改 Dockerfile,使用 RUN --mount=type=cache 运行 npm installnpm run build 指令(--mount=type=cache

开启 BuildKit 还有其他特性,比如输出日志更友好,基本每一步都会输出耗时,就这一条,值了!

实际操作分为 2 步:

修改 Jenkins 配置,在 docker build 命令前加上环境变量。修改后镜像构建命令长这样:

$  DOCKER_BUILDKIT=1 docker build .

修改 Dockerfile,将 RUN npm installRUN npm run build 指令前面加上 RUN --mount=type=cache npm xxx

FROM node:alpine as builder

WORKDIR /app

COPY package.json /app/

RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
--mount=type=cache,target=/root/.npm,id=npm_cache \
npm i --registry=https://registry.npmmirror.com/

COPY src /app/src

RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
npm run build

参考:

加3行代码减少80%构建时间

Docker 从入门到实践 - 使用 BuildKit 构建镜像

https://docs.docker.com/build/buildkit/

📒 Monorepo 下 Git 工作流的最佳实践

📒 Prometheus 数据存储那些事儿

📒 Go1.20 一次打破 Go1 兼容性承诺的真实案例

📒 基于 GraphQL 的云音乐 BFF 建设实践

⭐️ 【第2823期】打包JavaScript库的现代化指南

⭐️ 通过分析gin、beego源码,读懂web框架对http请求处理流程的本质

📒 极端情况下Go的Map也会发生内存泄漏

📒 这两个特性将在 Go1.20 中被弃用,受影响最大的居然是国内的面试官

📒 Go:讲一个故事说明使用汇编语言的必要性

📒 Go学设计模式--怕把核心代码改乱,记得用代理模式

📒 Go语言中常见100问题-#25 Unexpected side effects using slice append