回归简约——Go语言简介

GoLang(通常缩写为Go)是很多程序员都希望学会使用的最新语言。在本文中,我将介绍go语言的功能、潜力以及是否应该关心Go的发展。

GO的发展

上图为go语言的吉祥物,也是go语言的logo

Go没有想像中那么新。它起源于2007年谷歌内部项目研发,直到2009年才被公开发布。go语言真正的转折点是2012年3月发布了一个新的版本,这个版本的介绍您可以查看这篇文章

由于现有的语言不适合大规模服务器基础设施部署,所以才有了Go语言的诞生。但是Go语言没有将高效的编程

、编译、执行结合起来。语言嘛,总会对使用某些方面做出妥协。

Go的核心特征在于其稳定性和效率,语言的设计尽可能简单,从现代化的编程观点出发,而不是建立在几十年老旧的的发展思想之上。

谁在使用Go?

你可能会觉得大家都在谈论Go,但是它的流行程度趋势还是值得商榷的。就像Docker一样,对可扩展应用程序日益增长的需求意味着大家都在讨论这几个新兴的词语。但这并不意味着他们在生产环境中广泛使用。除了免费使用外,Go是一颗冉冉升起的新星,吸引了众多的贡献者及大佬。go语言绝对是一种适合学习和欣赏的语言,但也许并不能支持你所有项目开发。

随着大规模的应用部署,没有一种语言在整个开发中占主导地位,但这里有一些出名的项目及公司俄日使用了Go语言作为他的后台:

Go的特点

Go被选为大规模,分布式和网络应用的大部分原因可能是由于其功能集的强大。

简约设计

Go的设计很实用,功能也很简单。许多C语言无用且复杂的思想概念已经被Go语言所去除。例如,C语言具有面向对象的概念,但在Go中这些已经是最基本的东西。

尽管如此,Go已经设计的很棒了,不需要太多的编码,又能够处理复杂的任务。

静态类型

为简单起见设计的语言(如JavaScript)允许您动态创建变量,而你不必担心为这些变量分配正确类型的值。语言编译器将在运行时根据您的程序逻辑计算出所需的变量类型。这导致了更简单的编码体验,但是可能会导致执行效率低下和错误频出。

像Go这样的静态类型语言会强迫使程序员声明变量类型,并在编译时检查代码是否正确使用变量。这可能会让代码更长,但却获得更好的编程效果,也会更早识别并消除潜在错误,并通过消除这种错误动态检查来提高效率。

垃圾回收

垃圾回收是应用程序自动内存管理的一种形式。其功能是确定应用程序不再需要内存中的哪些对象,并回收新对象的空间。某些资源(如网络套接字和数据库句柄)仍然需要手动处理。

编译

不像PHP和JavaScript这样的语言,执行指令在运行时直接通过解释器执行。而Go是一种编译语言,在执行之前,代码首先被编译成机器语言。

编译后的语言运行速度更快,效率更高,但查看修改代码却很麻烦,程序支持的所有平台都需要单独和专门编译才能运行。

Go以其编译速度快而著名,与开发速度的与解释性语言(PHP和JavaScript等)差不多。

大型标准库

标准库是跨编程语言提供的一组库函数。当你的代码需要调用他们时,这些函数在一个库中就可独立被调用。Go有一个大型的软件包库,涵盖压缩、I / O控制、数据库访问等功能。

我们在这里做一个简单的演示,比如您需要导入image包的子包gif,你只需要这样简单的操作:

import "image/gif"

要导入image包及其子包,就这样做:

import "image"

并发

Go支持多种CPU,复杂的I / O控制和分布式基础设施,其并发处理功能是他独树一帜的地方,也是超越其他语言的优势之一。go通过使用channels概念来控制访问,Go消除了其他并发语言中遇到的共享变量的问题。

最简单的方法是使用go关键字:

    package main

    import "fmt"

    func PrintGreeting(greeting string) {
        fmt.Println("Hello " + greeting)
    }

    func main() {
      go PrintGreeting("World")
    }

这包括两个并发运行的main函数和PrintGreeting函数。这是一个最基本的例子,还有很多其他功能可用于并发功能之间的通信。

学习go

Go的学习路线将取决于您的编程背景。具有C背景的开发人员会发现很多类似的语法。如果您学习的是Web编程开发背景,那可能对你来说是一个更难的开始。

Go的开发人员的目标是创建一种语言,它结合了诸如Ruby和JavaScript的等现代解释语言的简单性,也融合了如C语言等传统语言的可靠性。如果您不熟悉静态类型和并发基于线程的概念,这个可成为你学习的一个不错的路线。这些变化会让你更快去了解编程的新路线。

学习资源

以下是一些很好的资源:

如果这些还是满足不了你,来看GO一个全面的学习资源列表

走得更远

当然,这个语言还有更多的东西可以在本文中介绍,我们来看看一些更重要的功能。

模板

如果没有创建WEB页面的功能,那就不是一个完整的现代语言,,允许分离应用程序逻辑和布局。Go的html /模板包是标准库的一部分,允许分离应用程序逻辑和布局。作为HTML和Handlebars的混合,如果您使用过模版,就会发现这个使用方法很简单了,例如:

<h1>{{.Title}}</h1>

<p>{{printf "%s" .Body}}</p>

构架

当一种新语言变得活跃,人们需要为它创建框架以减少重复和样板代码。大多数Go框架都是针对Web应用程序的,包括应用程序生成器,路由,MVC和ORM支持等功能。框架有:

移动端

我打算在另外一篇文章中进一步讨论这个话题,现在Go已经被移植到Android和iOS上。Android的支持有可能为未来从Java的转移为go奠定基础,但这是个人纯粹是猜测。

结论

与其他编程语言相比,Go是一个新的竞争者。通常,这会导致不成熟产品的不当宣传。由于这种语言的创造者们做出了细致而明智的选择,所以我们要继续宣传,并始终如一地履行诺言。

Go并不适合你的每一个应用程序,而且对许多项目来说都是浪费资源。但是,如果我在这篇文章中提到的内容吸引你,那么开整吧!

对不起,忍不住这个双关语!如果你使用Go,你的经验是什么?

原文链接:https://www.sitepoint.com/simple-clutter-free-programming-with-go/

原文作者:Chris Ward

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Node.js真的无所不能?那些不适用的应用领域分析

Node.js是一个服务器端JavaScript解释器,底层采用的还是libevent;它的目标是帮助程序员构建高度可伸缩的应用程序,目前对Node.js 的采...

2906
来自专栏韩伟的专栏

格斗类帧同步游戏的优化

帧同步技术除了可以用来做 MOBA 类游戏,同样可以用来做需要大量快速操作的格斗类游戏,本文就是尝试提出一些解决帧同步方案下格斗游戏的优化措施。

7590
来自专栏Java学习网

Web项目使用缓冲技术提高应用的稳定性及性能

生活中熟悉的天气预报信息为我们提供了及时的天气信息,给人们带来了很多的便利;从天气数据分析出来到人们看到这之间进行了大量的处理,一个网站显示的天气信息,需要访问...

3375
来自专栏斑斓

软件系统的稳定性

软件系统的稳定性,主要决定于整体的系统架构设计,然而也不可忽略编程的细节,正所谓“千里之堤,溃于蚁穴”,一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系...

3566
来自专栏Golang语言社区

Node.js真的无所不能?那些不适用的应用领域分析

Node.js是一个服务器端JavaScript解释器,底层采用的还是libevent;它的目标是帮助程序员构建高度可伸缩的应用程序,目前对Node.js 的采...

29010
来自专栏栗霖积跬步之旅

1.9yield方法

yield()方法的解释:放弃当前cpu资源,将它让给其他的任务去占用CPU执行时间。但放弃的时间不能确定,有可能刚刚放弃,但马上又获得CPU时间片。 线程代码...

1850
来自专栏EAWorld

基于场景选择微服务的API范式:REST、GraphQL、Webhooks和gRPC

原题:When to Use What: REST, GraphQL, Webhooks, & gRPC

1403
来自专栏青玉伏案

设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

在前段时间呢陆陆续续的更新了一系列关于重构的文章。在重构我们既有的代码时,往往会用到设计模式。在之前重构系列的博客中,我们在重构时用到了“工厂模式”、“策略模式...

1916
来自专栏吴伟祥

通信协议之Protocol buffer(高效的数据压缩编码方式之Java篇)

之前一直习惯用json进行数据的传输,觉得很方便。来到新公司后发现同事们用的更多的的协议都不是json,而是Protocol buffer。这个东西之前没有听说...

1083
来自专栏phodal

拆分大型 Angular 应用四种策略

852

扫码关注云+社区