最近我决定参与一些开源项目,因为高中时折腾过VPS,所以正好认识Openlist。综合对比其它项目后我便决定将它作为我的第一个开源贡献项目。
不过本文的主题不是开源,而是关于编程语言学习。 于是为了看懂Openlist项目,我有(bei)幸(po)开始学习Go语言。
当然,我不可能先找一本几百页的书,然后从HelloWorld,if-else,变量这种所有语言都差不多的地方学——我需要高效的方式来达到足够用的水平。
不过也不能直接问AI呀——AI给的内容往往很细碎,我想要的是体系化的知识。也因此,我开始寻找一个适合有编程经验的人,帮助他们快速入门某种语言的在线资源。
也因此,我遇到了Learn X in Y Minutes项目。该项目非常符合快速入门某种语言。
当然,它不可能让你成为xx语言专家,却足够让你清除这个语言是做什么的,有哪些特性,基本骨架给你摸个八九不离十。
光说还是有些抽象,让我们看一个针对Go语言的例子:
func learnFunctionFactory() {
// 空行分割的两个写法是相同的,不过第二个写法比较实用
fmt.Println(sentenceFactory("原谅")("当然选择", "她!"))
d := sentenceFactory("原谅")
fmt.Println(d("当然选择", "她!"))
fmt.Println(d("你怎么可以", "她?"))
}
// Decorator在一些语言中很常见,在go语言中,
// 接受参数作为其定义的一部分的函数是修饰符的替代品
func sentenceFactory(mystring string) func(before, after string) string {
return func(before, after string) string {
return fmt.Sprintf("%s %s %s", before, mystring, after) // new string
}
}
是的这就是x-in-y网站讲述Decorator的用法的所有内容了。我们很容易看出其优点:
- 简洁明了
- 对于已经了解高阶函数、闭包等知识的人,这种写法展示了Go语言也支持这些特性;对于不了解的人,也没有过早引入这些复杂概念。
- 以代码为主导而不是用自然语言描述一堆不准确、模糊的描述
- 将成体系的相似内容汇编到一起
作为对比,如果你问AI的话,就会输出下面一大堆。

我相信很多人会喜欢上面那种。
Btw,这个项目还有Github仓库,大家有空可以去捧场。