回归简约——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 条评论
登录 后参与评论

相关文章

来自专栏Java呓语

简单工厂模式(选择产品)

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。

641
来自专栏圣杰的专栏

DDD理论学习系列(11)-- 工厂

1.引言 在针对大型的复杂领域进行建模时,聚合、实体和值对象之间的依赖关系可能会变得十分复杂。在某个对象中为了确保其依赖对象的有效实例被创建,需要深入了解对象实...

23210
来自专栏前端黑板报

Vue列表循环从指定下标开始

最近遇到一个问题,在循环商品列表时,因为数组的第一个是商品的品牌介绍,所以循环时不能直接循环,只能从第二个元素开始。

5723
来自专栏GopherCoder

『Go 语言实现简易爬虫:市值前100数字货币交易信息』

2504
来自专栏数据科学

面向过程到面向对象再到面向函数

拿到问题,识别输入输出,脑海里先产生一个实现输入到输出的大致思路。 如果这个开始按着思路去实现代码,就会写出一堆处理过程,这个时候,程序只有原始的输入输出和中间...

1292
来自专栏思考的代码世界

Python网络数据采集之数据清洗|第06天

1223
来自专栏HansBug's Lab

算法模板——Dinic网络最大流 1

实现功能:同sap网络最大流 今天第一次学Dinic,感觉最大的特点就是——相当的白话,相当的容易懂,而且丝毫不影响复杂度,顶多也就是代码长个几行 主要原理就是...

2838
来自专栏撸码那些事

【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

一种重要的抽象实现手法是创建内聚而完整的抽象。抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。如果抽象只支持部分相关的方法,其使用者就可能不得不自己去实...

1689
来自专栏张善友的专栏

读《代码不朽:编写可维护软件的10大要则》C# 版

这本书特别针对没有接受过计算机科学或软件工程专业学习的软件开发人员,这类人员除了熟悉所用语言语法和语义之外,很少接受其他专业培训,对软件工程中的一些概念理解欠缺...

6310
来自专栏函数式编程语言及工具

Akka(0):聊聊对Akka的初步了解和想法

   前一段时间一直沉浸在函数式编程模式里,主要目的之一是掌握一套安全可靠的并发程序编程方法(concurrent programming),最终通过开源项目F...

2348

扫码关注云+社区