越是接触的编程语言多了,越是做的项目多了,就越是觉得Go语言的简单是多么一件不简单的事——在一个惯有思维的世界中,舍弃了这么旧世界的东西,是非常不简单的。
是的,我的观点就是,加法大家都会做,但对一件事情做减法、提炼精华,却是相当的不容易的。
简在哪里?
没有类
Go语言中没有类(class)。
接触过Lua或JavaScript的都知道,Lua和JavaScript没有class关键字,要实现对象功能,是通过“原型”来实现的(prototype)。
type BaseObject struct { // 基类
field1 int
}
type TestObject struct { // 继承自BaseObject
BaseObject
field2 int
}
没有try, catch
Go语言没有try和catch关键字?!
我想用惯了try和catch捕获错误的工程师们肯定会非常惊讶。但我也是那种比较痛恨try-catch的人,它们的出现经常让错误难以侦察。
// C#
try
{
Do1()
Do2()
Do3()
}
catch (Exception e)
{
Log(e.Message)
}
不开玩笑的说,类似的try-catch大包围非常的常见,到出错了的时候,究竟是Do1还是Do2还是Do3的问题啊? 不知道,好吧只能断点了。
以往在C#开发中,我更喜欢以类似的方式
// C#
IsNotNull(Do1, "Error! Do1 is null")
IsTrue(Do2, "Error! Do2 is false")
为错误做文字描述,看起来啰嗦,但当成千上万的代码堆积如山时,这样做的好处却是非常明显的,瞄一眼就能定位到错误的地方。
Go语言中没有try-catch,错误的捕捉其实就是类似这样的方式:
// Go lang
do1Result, err := Do1()
if err != nil {
fmt.Errorf("Do 1 is wrong!")
}
是的,适当的字符串描述是啰嗦,但却相当于为做买好了保险。
没有构建工具
要建个C语言工程是吧?最起码装个Turbo C、Visual Studio C++吧; 要建个Java工程吧?JVM、IDE一套东西要弄吧...
编程的世界里,构建工具非常的多:make、autoconf、cmake、Ant、Maven、Gradle等等等;
在Go语言中,“go build”命令,就是你的构建工具;“go test”命令就是你的单元测试工具;开发、编译、测试,它全部都帮你做好了。
强制代码格式化
我是一个经常会为单词、空格、命名、排版斟酌半天的人,Go语言的强制格式化十分对我的胃口——所有的空格、字符对齐、花括号({})的位置都是在保存的一瞬间自动强制排版的。
统一排版的代码,会给大家一种非常舒服的感觉。美中不足的是没有强制添加注释功能,要不然就又少一个分歧点了......
比如我手贱,输入:
const(
ConstA
ConstB
)
经过go fmt进行格式化,它就会变成
const (
ConstA
ConstB
)
嗯,强迫症患者的最佳疗法。
另外一提:
// Go lang
func Func()
{ // Compie error!
}
在C#中,花括号{是习惯另起一行的,而在Go于中,却会导致编译错误。
简得不彻底的地方
Go语言的简,是相对于有编程基础的人来说的。这里提及一下我认为他不够简的地方,更多是从小白、零基础的人角度去考虑的,会让他们入门造成困扰的。
指针
Go语言中让我觉得最不够简化的地方,非指针莫属了。
并不是说我讨厌指针,这里针对的是没有基础的小白的,即毫无编程基础的普通人。它增加了Go语言入门的一难度,毕竟像其它的一些脚本语言如Python,是真的可以像写英文诗一般快速入门。
标准库的接口
毕竟定位于系统级编程的Go语言,标准库的接口封装更为抽象一些也是无可厚非的。这使它更健壮、更灵活,但降低了一定的易用成都。
标准库的接口封装抽象是怎么理解? 举个超简单的例子,像我们要打印一段文字:
// shell
echo 'hello world'
使用shell来实现,非常简单。
# Python
print 'hello world'
而在脚本语言python中,也是非常简单。
// Go lang
import "fmt"
func main() {
fmt.Println("hello world")
}
而在Go语言中,就要稍微复杂,要导入包了。更不用说像一些文件读取、写入方面的接口了。
当然了,系统级编程语言来说,这样良好的模块性设计其实是一大优点,只不过我们这里关注它的“简”,吹毛求疵。
Go语言更多是我业余的一些研究,而在实际工作中,却并未应用开来。毕竟对领导们来说,旧有的熟悉的东西,才是稳定的保证。
但是它更多让我学习到的,是它的思路——足够的简单,狠心的舍弃不必要的。
网友评论