golang(0)

前端之家收集整理的这篇文章主要介绍了golang(0)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我从 1 年前开始关注 Golang,但一直没有时间细致地学习 Golang 的语法。
有关设计哲学,和语法的概览,我倒是看了不少,前两天买了一本《Go语言程序设计》,打算认真学习一下。
作为一个 C++ 出身的程序员,以及一个 Unix 粉,和一个开源主义者,Golang 的设计哲学相当得对我的胃口。
我对 Golang 的理解是“一个服务器端编程语言”,下面我来谈谈 Golang 吸引我的地方。

精心设计过的语法@H_502_7@

这是和 PHP 比的,我之前一直在使用的 PHP 恐怕是流行的编程语言中,唯一一个语法没有经过精心设计的。
Golang 是由三位大牛共同设计的,它很年轻,没有历史包袱。
Golang 吸收了一些现代语言的语法,比如数组切片,多返回值等,但并不多,毕竟 Golang 的定位是工业级。

工业级@H_502_7@

Golang 不是一个玩具,它甚至比很多流行的编程语言更加严肃,在和 Java 靠齐。
Golang 的语法设计就是为了让代码更加易读,而不是像 C++ 那样留给了大牛们很大的发挥空间。
Golang 自带代码格式化工具,要求所有代码都有一致的代码风格。

社区@H_502_7@

Golang 的官网就是非常有活力的,首先就是一个 Hello World 和一个在线编译器。
目前 Golang 由 Google 牵头维护,包括 Google 在内的不少大公司都在使用 Golang.
文档,参考清晰地列在那里,第一时间提供给你了需要的信息,而且 Golang 还有个萌萌的吉祥物。
至于中文 Golang 社区的成长,也是相当迅速的,仅仅最近一年,就出现了两本完整的 Golang 中文教程,而且都是开源的。

本地代码和静态链接@H_502_7@

知道 Linux 下最大的坑是什么么?就是动态链接库。
为什么 Linux 大部分软件都要求编译安装,就是因为动态链接库。
Golang 通过完全静态链接的方式避开了这个大坑。
同时 Golang 编译出的是本地代码,服务器无需环境即可运行。
没错,不需要任何环境,不需要任何动态链接库。

静态类型和接口@H_502_7@

Golang 是一个静态类型语言,变量在编译时,就有一个唯一确定的类型。
因为 Golang 削弱了指针的功能,因此 Golang 甚至比 C/C++ 更加“静态”.
这使得 Golang 可以在编译时就进行完整的类型检查,在编译时就可以找到大部分的语法错误

Golang 接口的创新在于,将描述接口的工作,从定义类的时候,转移到了使用对象的时候。
这使得 Java 等语言中原本繁琐的接口功能,在 Golang 中变得非常好用。
Golang 的类型系统建立在接口上,同时接口和静态类型检查也是紧密相关的。

简化的 OOP@H_502_7@

C++,Java 中所谓的面向对象思想,略显复杂,Golang 则将 OOP 思想做了极大的简化,只留下了最核心的特征。

并发支持@H_502_7@

Golang 的并发支持由 goroutine 和 channel 支持
goroutine 是一种轻量级线程,目的是对 cpu 核心进行抽象,最大限度发挥多核心 cpu 的计算能力。
而 channel 是一种类似管道的线程间通讯机制,将经典的加锁模型,转换为了类似 Unix 进程间通讯的管道模型。

标准库@H_502_7@

作为一个服务器端编程语言,Golang 的标准可以说非常全面,大部分的算法,协议都包括在了标准库中。
对于网络编程,Golang 几乎是开箱即用的。
而且 Golang 也借鉴了 Python 等语言的包管理器,安装软件包非常方便。

错误处理@H_502_7@

Golang 没有传统的异常机制。 对于非致命的错误,Golang 使用返回值来报告(Golang 支持多返回值). 对于致命的错误,Golang 直接选择“崩溃”掉(当然也有恢复机制),不过按照 Golang 的哲学,既然是致命错误,就应当挂掉。 还有 defer 关键字,用于将一个语句“绑定”到函数退出时执行,无论是通过各种途径退出,这可是 C/C++ 里面的大问题。

猜你在找的Go相关文章