我的 Go 语言推荐

栏目: Java · 发布时间: 8年前

内容简介:我的 Go 语言推荐

我的  <a href='https://www.codercto.com/topics/6127.html'>Go</a>  语言推荐

Go语言作为一个新的编程语言(8年历史,对比C的40年,Java的20年很年轻了),很多人都挺喜欢,也写了不少推荐,互联网公司中在生产系统中使用Go的(主要是在云端服务中)也在逐渐增多。刚好这几天和同事讨论到这个话题,这里提供一个我的版本的推荐:

1. Go很好地继承了 C语言 灵活、简单有效的思想。我一直认为系统工程师应该读 Linux 内核代码,同一套代码,可以跑在小到耳机,大到100核的服务器的所有设备上,而且改改配置就可以一键build出可跑的内核出来。这样灵活的系统,代码可读性还相当不错,归功于C语言简单有效的设计,让C颇有点“增一分则太肥,减一分则太瘦”的意思。传统的C++则是反面例子,新增语言功能的“投资回报”较差(C++11倒是解决了不少问题)。而Go继承了C的这些风格,虽然细节不同,比如没有指针算术,在底层系统操作方面灵活性有所下降,但在很多方面变得更强大(并发性、自动内存管理等等)。Go的关键词数量甚至少于C(25 vs. 30左右),简单性保持得很好。

2. Go有很高的生产效率。举两个例子,Go不需要build文件(Makefile, Java的build.xml, pom.xml这些),而是只需要执行"go build"即可,通过目录结构自己找到项目结构。通过这样的“ 约定优于配置”( convention over configuration)的设计,大大提高了效率。第二个例子是调用C代码的cgo的设计,使用过 Java 的JNI(包括Android的NDK)的朋友应该知道,那来回生成.h文件,自己编译DLL/.so的感觉是很酸爽的。而在Go这里简单到可以把C代码直接嵌到Go代码同一个文件里,然后"go build"就可以。效率就是节省的生命和金钱啊 我的 Go 语言推荐

3. Go精选了一些复杂事情的优秀解决办法,通过语言功能和标准库提供出来。比如并发性功能,goroutine和channels的确就是比线程和流更好的抽象。而JSON/XML/HTTP/正则表达式这些,都有标准库的良好支持。这里Go有别于Swift,在语言特性的引入上很克制,很“精选”。对比Go,Swift感觉有点像个“学究”型的语言,引入了大批的语言特性,每个都很正确,但合起来就变得感觉繁琐。

参考 "Javascript是儿童编程好的语言选择"

-------------------

下面翻译一篇“Golang的微妙的生产力”(The Subtle Productivity of Golang),作者Paul Hoehne,把这个话题再说说。

我承认我对新的编程语言很着迷(或者甚至尝试使用对我是新的老编程语言)。但我只会对促进生产力的语言感兴趣。一年前,我试了试Go,发现了一种我多年没有感觉到的舒适感和生产力。当然,你也可以用其他语言做很多相同的事情。但是,像许多年前的C语言一样,Go是一种在我的头脑中我可以完全掌握的语言。可以把它看作是在灰色物质缓存中运行,而不需要因为缓存缺失而访问stackoverflow.com。

随着语言的发展,增加了类似于并发(C++14)或泛型(Java和C#几年前)的特性,它们变得更大、更复杂。C有大约30个关键字,C#有64个,Java有53个左右,C++14个大约有80个。而Go大约有25个。关键词并不是衡量语言复杂性的唯一标准。在C语言中编写应用程序常常比在Java中更乏味。但关键字确实给人一种概念空间,开发人员在使用特定语言时需要处理这些概念。

我在研究生院花了很多时间用vi写C语言,没有自动完成功能,也很少打开手册。我用man pages来进行系统和库调用,但是我有足够多的内存在我的耳朵之间,以记忆住基本的调用(open, creat, trunc, read, write等等)。有一种形式的生产力来自于“能缓存住所有东西”。

我无法想象,如果没有支持自动完成、或立即语法检查等功能的IDE的情况下,Java编程的生产效率。当然,Java可以做很多事情,但是它是有非常大的库的非常大的语言。声明main函数需要三个关键字(public static void),更不用说类声明的开销了。即使是我们认为理所当然的特性,HTTP服务,也利用了几层库。Java没有HTTP服务提供者或服务使用者这样的“内含电池”的服务,这意味着您可能需要考虑使用Netty或嵌入式Tomcat。

我可以在没有独特功能的文本编辑器中写Go。它是现代的语言,具有并发性、良好的unicode支持、以及包含HTTP服务等现代特性。它感觉和C一样舒服,但是和Java一样高效。对于一些人来说,“舒适”的语言是一种奇怪的概念,但是语言是一种工具,一种舒适的、易于使用的 工具 通常是一种更好的工具。

我也觉得,长期而言,Go将成为容器化数据中心的语言。它静态地编译成二进制文件,因此运行时需求非常低。Java、 Python 、C#等要求容器具有相应的运行时安装的正确版本。而编写Go应用程序很容易,它只使用普通的Linux容器,而不需要额外的依赖。它从同一个代码库编译到Windows, Linux, Mac OS, ARM目标。它允许我将一个应用程序作为单一的可执行的二进制文件交付。

为什么不是每个人都用它呢?首先,它是新的。我知道许多企业仍然在运行PowerBuilder应用程序和基于JDK 6的服务。哎呀,我今天早上在app上买的咖啡可能会在某个时候运行40年前的COBOL代码。Go 1.0只有5岁。Java大约有20年的历史,C#稍微年轻一些,但是Java和C#当年满足了真正的需要,降低了编写应用程序的成本。在20世纪90年代后期,人们想当然地认为你会用C++编写应用,而用Visual Basic作为其前端。大量调试的时间花在奇怪的COM错误或内存损坏上。用Go代替Java的理由不像停止用C++来惩罚自己那样强大。但是,当当我们迁移到一个基于容器的世界,而Java变得越来越臃肿,那我认为Go会获得优势。

随着越来越多的开发人员使用Go,他们会发现,能够将整个语言(以及一些关键的库)保持在您的头脑中会导致一种微妙的生产力形式。而这一特点,正是其他越来越庞大、越来越复杂的语言所缺乏的。

----------

头图当然是Go的吉祥物gopher(北美囊地鼠)

我的 Go 语言推荐


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing Programmes

Designing Programmes

Karl Gerstner / Springer Verlag / 2007 / $499.00

Karl Gerstnera (TM)s work is a milestone in the history of design. One of his most important works is Designing Programmes, which is presented here in a new edition of the original 1964 publication. I......一起来看看 《Designing Programmes》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具