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

相关文章

来自专栏企鹅号快讯

代码学习与实践:开篇-测试深入了解代码的好处及实践

1 缘起 最近在负责测试的项目,相对来说比较复杂。从业务上来看,涉及商品添加、审核、交易、支付、退款、换号、管理等多个流程,从代码逻辑上来看,划分了9个模块,还...

1808
来自专栏程序人生

再谈 API 的撰写 - 总览

背景 去年我写过一篇文章:撰写合格的 REST API。当时 Juniper 裁掉了我们在德州的一支十多人的团队,那支团队有一半的人手在之前的半年里,主要的工作...

3707
来自专栏程序人生

如何用正确的姿势打开 TDD?

TDD(Test Driven Development)一直是程序界追求的一种开发境界。要想真正做到对项目有帮助的 TDD,并不是一件容易的事情。我见过不少团队...

26110
来自专栏Java编程技术

阿里之路(二)

从今年7月到现在转眼间转岗到淘宝部门已经有小半年了,最近刚刚经历人生中第一次双11实战,体验了一把系统经受高并发高流量的冲击的感觉,一个字爽,作为小白,在这小半...

572

为什么我们从Python切换到Go?

切换到新的编程语言向来是关键一步,尤其是当你的团队只有一位成员有该语言的使用经验时。今年年初,我们将 Stream 的主要编程语言从Python 切换到 Go。...

982
来自专栏IT派

高级工程师的晋升之路:如何用 JavaScript 打造十亿级的应用

我以前开发过超大规模的JavaScript应用。现在我不做了,所以我觉得应该回顾下我学到的东西。昨天我在宴会上喝啤酒时有人问我,“嗨Malte,你为什么要来讲这...

612
来自专栏微信终端开发团队的专栏

Android微信上的Wear的开发总结

2014年3月19日,Google发布为智能手表打造的全新智能平台Android Wear,微信于6.0.2版本开始支持,Google对And...

2089
来自专栏Kirito的技术分享

天池中间件大赛dubboMesh优化总结(qps从1000到6850)

天池中间件大赛的初赛在今早终于正式结束了,公众号停更了一个月,主要原因就是博主的空余时间几乎全花在这个比赛上,第一赛季结束,做下参赛总结,总的来说,收获不小。

1525
来自专栏架构师小秘圈

为什么一定要前后端分离?

作者:孤独烟,中国平安研发工程师,目前负责云平台架构设计以及需求研发工作。毕业后一直从事Java开发工作,在Web开发、架构设计上有多年的实战经验。在MySQL...

892
来自专栏Golang语言社区

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

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

27710

扫码关注云+社区