通向Golang的捷径【Top】

点点吃太多 · · 555 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

全文基于The.Way.to.Go.2012,于2016年7月完成,全文有点长,通常情况下,周末更新,谢谢关注,感谢马克飞象提供了一个超级棒的在线markdwon编辑器。

前言

更紧凑的代码量, 更快的编译速度和执行速度, 自然导致更多粉丝的追随.

本书致力于给出 Go 语言的一个完整记录, 它将包含所有的 Go 资源, 比如在线文档, 博客信息, 书籍, 论文, 音频和视频资源, 笔者所掌握的软件工程, 语言的学习资源和相关数据库, 并使用一种更系统的方式, 来组织这些内容和技巧.

在 Google 工作的一些开发者都屡次经历过软件开发的失败, 尤其是使用 C++ 编写大型服务器软件时, 这时的二进制可执行文件相当巨大, 需要漫长的编译时间, 而语言自身也颇为老旧, 近十年来, 硬件发展所带来的技术和变更, 无法影响到 C++, 因此开发者罗列了以下期待, 并尝试设计一种新语言, 以解决这些问题:

  • 更快速的软件构建
  • 语言应支持多核硬件
  • 语言可工作在网络环境下
  • 语言应易于使用

所以 Go 语言诞生了, 它既可作为一种动态语言 (如 Python 或 Ruby), 又可保持静态语言的性能和安全性 (如C 或 Java).

Go 采用了更实际的方法, 来构建一种新语言, 没有使用新奇的语法和神秘的理念, 来创造一种全新的语言, 而是基于 C/Java/C# 语法进行了改造, 它试图将面对对象编程和并行编程组合在一起.

本书希望为那些准备学习迷人而强大的新语言的人, 提供必要的帮助, 并假定学习者具备一定的编程知识和经验, 但并不限定于 C 或 Java 的编程经验. 如果你已经熟练掌握了 C 或是面对对象的编程语言, 可以比较一下,Go 与这些语言的差异 (本书将使用 OO 来表示面对对象 (object-oriented)).

本书将从基本概念开始逐层递进, 以描述一些高级概念和技巧, 比如并发协程 (goroutine) 和并发通道 (channel) 的多种应用方法, 如何使用来自 Go 的 Google API, 如何使用存储, 如何在 Go 中完成测试, 如何在 Web应用中使用模板.

在第一部分中, 讨论了语言创立 (第 1 章), 以及如何完成 Go 的安装 (第 2 章) 和开发环境的配置 (第 3 章).

第二部分给出了 Go 语言的核心内容, 比如简单和复杂的数据类型 (第 4,7,8 章), 控制结构 (第 5 章), 函数 (第6 章), 包含方法 (method) 的结构 (第 10 章), 接口 (第 11 章), 基于上述 Go 语言的功能性和面对对象的讨论,将介绍大型项目中 Go 代码的组织 (第 9 章).

第三部分将学习如何使用不同格式的文件 (第 12 章), 如何使用错误处理机制 (第 13 章), 之后将包含 Go 语言的精华所在, 如何在并发和多核应用中, 使用并发协程和并发通道 (第 14 章), 之后将讨论分布式应用和 Web应用中 Go 语言的技巧 (第 15 章).

第四部分将给出 Go 语言的设计模式和应用习惯 (第 16,17 章), 之后将给出一些有价值的代码片段 (第 18 章),这将有利于之前章节的复习, 并会给出一个 Go 项目的完整构建过程 (第 19 章), 之后会讨论在云端 (GoogleApp 引擎) 上,Go 语言的用法 (第 20 章), 最后一章 (第 21 章) 将讨论商业应用和机构应用的一些真实案例,之后还将包含 Go 语言的用户组, 新闻组, 包和应用工具的参考, 本书问答和练习的答案, 以及参考文献.

Go 语言相当紧凑, 以保证语言的易用和自动化, 并使用了敏捷 (Agile) 编程的 KISS 原则, 保持紧凑和简单(Keep It Short and Simple).

Go 语言解决了 C,C++ 或 Java 的大多数” 开放”(易受到外部攻击和易出错) 属性, 以使开发者更关注于开发本身, 比如变量的默认初始化, 内存的自动分配和释放, 以及更强大的控制结构, 同时 Go 也可阻止不必要的输入, 这使得 Go 语言相比于其他面对对象语言, 更加紧凑和易读.

Go 语言足够简单, 这是 C++ 或 Java 无法比拟的, 与它们相比,Go 的学习难度也更低, 所以 Go 语言可视为C 语言的替代者.

Go 语言的大多数示例代码和练习, 只能提供与控制台的交互, 这无须惊讶, 因为 Go 语言的目标, 就是成为一种系统语言, 提供一个跨平台的 GUI 框架, 是一项繁重的任务, 已有一些项目在进行类似的工作, 因此不久的将来, 也许会出现一个 Go GUI 框架, 目前也可基于 Web 和通讯协议, 利用 Go 强大的 http 包和模板包, 为一些示例和练习, 提供一个 GUI 界面.

我们一直在使用和探索经典的 Go 代码, 因为这些代码已被证明具有最好的性能, 同时也不停地尝试, 以保证不会有未使用过的概念或技巧被遗漏, 因此最好能提供一些异常保护, 这将出现一个基本概念, 在应用高级功能时, 最好给出异常保护, 以提供安全性. 在 227 代码示例中, 给出了所有概念和技巧, 并能打印出输出文本,以确定执行和实验的有效状态.

本书给出了一些交叉引用 (前向或后向), 但应用场景通常是,Go 开发环境配置完成后, 可开始代码示例的实验,并尝试以下动作: 控制一种新语言, 从实验中掌握一种新概念, 所以本书包含了 130 个练习, 同时题解可从网上下载, 在练习中包含了斐波纳契 (Fibonacci) 算法, 用于描述 Go 语言的不同概念和编码技巧.

本书的示例代码可从页面https://sites.google.com/site/thewaytogo2012/上下载,信息.其中包含了一些增补和更新

如果你已完成 Go 语言的安装, 本节的一些章节将为你提供最好的实例和语言模式, 但其中一些例子将对新手造成困扰, 在第 18 章中, 收集了大量的代码片段, 并给出相应的文本描述.

最后一个完整的索引表 (英文索引表将从译文中删除), 可帮助你尽快查找所需的内容, 同时本书的所有代码在Go 1 版本下可以工作.

以下是 Bruce Eckel 对 Go 语言的评价, 他是 C++,Java 和 Python 的权威专家:

基于 C/C++ 的背景, 让我在 Go 中嗅到一股清新的空气, 我在想 Go 应当比 C++ 更适合于系统编程, 因为它具有更高的产出效率, 同时能解决一些 C++ 难以处理的问题, 当然这并不是说,C++ 的出现是一个错误,这只是时代前进的必然选择, 当时我们深陷于 C 语言的思维方式, 甚至是汇编语言, 因此我们认为任何语言在构建代码时, 所需的开销并不重要, 而垃圾收集或并发编程都是相当可笑的, 没有人认真考虑过这些问题, 但C++ 将我们推入到一个更大的世界中, Stroustrup 做出了正确的选择, 让 C++ 能被 C 程序员理解, 并能够编译 C 代码, 这就是当时我们所需要的.

那之后我们开始补课, 比如垃圾收集, 异常处理和虚拟机, 这些问题被大量的讨论, 并逐渐被接受, 而 C++ 的复杂度 (甚至新的 C++ 标准还在增加更多的复杂度) 影响了它的生产效率, 加在 C++ 程序员身上的所有特性, 不得不让他们将 C++ 视为一个 C 兼容语言, 这使得 C++ 特性已无人感兴趣, 从而造成时间和精力的浪费, 现在 Go 语言解决了 C++ 所存在的问题.

在此, 笔者要向 Go 语言开发组表示感谢, 感谢他们创建了一个优秀的编程语言, 尤其是 Rob Pike, Russ Cox和 Andrew Gerrand, 他们给出的示例说明和解释, 同时我也要感谢 Miek Gieben, Frank Müller, Ryanne Dolan和 Satish V.J, 他们给予邮件新闻组用户的细心解答.

欢迎进入美妙的 Go 开发世界!


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:点点吃太多

查看原文:通向Golang的捷径【Top】

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

555 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传