说说Go语言的简

作者: 陈凯利 | 来源:发表于2016-05-09 20:17 被阅读618次

越是接触的编程语言多了,越是做的项目多了,就越是觉得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语言更多是我业余的一些研究,而在实际工作中,却并未应用开来。毕竟对领导们来说,旧有的熟悉的东西,才是稳定的保证。

但是它更多让我学习到的,是它的思路——足够的简单,狠心的舍弃不必要的。

相关文章

  • 说说Go语言的简

    越是接触的编程语言多了,越是做的项目多了,就越是觉得Go语言的简单是多么一件不简单的事——在一个惯有思维的世界中,...

  • 01 Go极简教程 目录

    极简教程的初衷是给已有其他语言基础的人阅读尽可能少的内容学习Go语言 Go极简教程 目录 Go极简教程 环境安装及...

  • 潍坊go语言培训

    潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍...

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • Go语言入坑

    GO语言基础 认识并安装GO语言开发环境 Go语言简介 Go语言是谷歌2009年发布的第二款开源编程语言 go语言...

  • Go 语言学习技巧和编程思维

    Go 语言学习技巧和编程思维 一、了解 Go 语言 了解 Go 语言背景 学习 Go 语言,首先要了解 Go 语言...

  • 第十六章:Go语言面向对象编程

    1. GO语言OOP概述 Go语言不是纯粹的面向对象的语言,准确是描述是,Go语言支持面向对象编程的特性.Go语言...

  • golang的helloworld

    go语言初识 go语言的变量

  • 极简开发语言go语言

    go语言目前满足了我的几个期望:语言简单,可应用于多种场合;工具简单,容易开发部署;编译快速,运行快速,占用资源少...

  • Go标准库flag使用

    Go语言标准库flag基本使用 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简...

网友评论

    本文标题:说说Go语言的简

    本文链接:https://www.haomeiwen.com/subject/pbjerttx.html