关于本刊

这是猫鱼周刊的第 7 期,本系列每周日更新,主要内容为每周收集内容的分享,同时发布在

博客:阿猫的博客-猫鱼周刊
RSS:猫鱼周刊
邮件订阅:猫鱼周刊
Discord:猫兄的和谐号高铁
私信:[email protected]

头条

又到年底啦,又到了写年终总结的时间。这是我的年终总结,欢迎查看。

文章

Interface 的误区

原文链接

作者表示接口经常用于达成内聚的目的,并以此来实现替换数据库层进而进行 mock、单测等。但实际上这层不必要的抽象会使代码更加脆弱,也更难阅读和维护。相反,作者认为现代的代码在进入生产后要么只会增加功能,要么整个被替换,而且数据库基本是跟应用绑定的。最后作者提出了一些他的建议:

  • 多一层的接口是否是必要的?标准库或第三方包中的接口能否实现同样的功能?
  • 你是在写应用还是库?接口更多出现在库而不是应用中。
  • 接口必须根据需求自然形成,而非提前设计。
  • 减少方法,一个就够了。(?这里不是特别理解)
  • 减少参数的数量,尽量使用基本类型,或标准库中的知名类型,减少使用自定义的类型。
  • Mock 不是引入接口的理由。
  • 问问自己,这个接口会有多少个用例?如果少于三个,最好还是用标准库中的接口。

Go 项目模板

原文链接

在今年的 Go 开发者调查中,调研了几个有关创建新项目的问题。Go 团队最近做了一个新工具,通过 gonew 命令来从已有的模板创建新项目。

An image to describe post 猫鱼周刊 vol. 006 年终总结时间到!

我用我自己的一个 gin 模板 体验了一下,如果开发者自己本身就有趁手的项目模板(或者使用社区提供的优质模板),确实是很快就能创建出一个舒服的项目结构。稍微有点不足的是,使用 gonew 创建出来的项目,不会自动更改项目文件中的 import 路径,因此创建出来的项目并不是马上就能跑通。

容器化开发

原文链接

最近 Jetbrains 的 IDE 也开始支持 devcontainers 了,vscode 在更早就有了这个功能。容器化开发也许是解决同时开发多个项目时,不同的复杂依赖的问题的一剂良药?

项目

Tensor-Puzzles —— pytorch 练习题

srush/Tensor-Puzzles - GitHubAn image to describe post 猫鱼周刊 vol. 006 年终总结时间到!

一些常见的矩阵操作等的 pytorch 练习题。还记得大学的时候写炼丹代码的时候就经常被维度转换等等折磨,如果回到大一大二,也许我会认真刷一遍这个练习题(x)。

go-sqlmock

DATA-DOG/go-sqlmock - GitHubAn image to describe post 猫鱼周刊 vol. 006 年终总结时间到!

一个通过模拟数据库驱动来测试数据库交互的 mock 工具。可以断言数据库执行了什么语句来进行测试。

工具

GitHub Wrapped —— 生成你的 GitHub 年度报告

网站链接:GitHub Wrapped

Sony Playstation 2023 Wrap-up

网站链接:Wrap-Up 2023 | PlayStation

想法

注册登录体验

一般产品的注册登录有落地页或首页仅展示“登录“,仅展示“去体验”,同时展示“注册”和“登录”这几种,下面分别使用一些例子来详细说明。

  • devv.ai:仅展示登录。网站不登录即可使用,因此不需要强调注册。同时,登录弹窗中支持第三方登录(仅谷歌),通过邮箱登录不区分注册/登录行为,第一次登录即为注册。实际上是通过统一了第三方登录和邮箱登录的流程,去除了注册行为,来达到一致。这种方式仅需一步就能到达注册页面,仅需两步就能完成新用户注册(第一步点击登录按钮,第二步发送邮件或跳转第三方登录)。
  • cubox.pro:仅展示去体验。网站是需要注册登录才可以使用的,所以点击去体验之后跳转到的是登录页面,注册会比登录深一个层级。这种方式仅需两步就能到达注册页面。
  • proton.me:同时展示注册和登录。网站需要注册登录才可以使用,同时还有付费服务。因此注册按钮文案为"Create free account"。

一般好的注册登录体验,在一到两步内就要能到达注册页面。

最后

本期的周刊排版有了一些新变化,主要是:

  • 关于部分移到了文章顶部,新增了 RSS 链接,去掉了掘金的链接(以后周刊不在掘金发布了)。
  • 增加了一个头条的栏目(不一定每期都有),主要会对我最近的好文章进行展示。

最后的最后,祝大家圣诞节快乐,新年快乐。(下周放假,也许停发一周)