GO 入门指南
  • README
  • 开始
    • 前言
  • 第一部分:学习 Go 语言
    • 第1章:Go 语言的起源,发展与普及
      • 起源与发展
      • 语言的主要特性与发展的环境和影响因素
    • 第2章:安装与运行环境
      • 平台与架构
      • Go 环境变量
      • 在 Linux 上安装 Go
      • 在 Mac OS X 上安装 Go
      • 在 Windows 上安装 Go
      • 安装目录清单
      • Go 运行时(runtime)
      • Go 解释器
    • 第3章: 编辑器、集成开发环境与其它工具
      • Go 开发环境的基本要求
      • 编辑器和集成开发环境
      • 调试器
      • 构建并运行 Go 程序
      • 格式化代码
      • 生成代码文档
      • 其它工具
      • Go 性能说明
      • 与其它语言进行交互
  • 第二部分:语言的核心结构与技术
    • 第4章:基本结构和基本数据类型
      • 文件名、关键字与标识符
      • Go 程序的基本结构和要素
      • 常量
      • 变量
      • 基本类型和运算符
      • 字符串
      • strings 和 strconv 包
      • 时间和日期
      • 指针
    • 第5章:控制结构
      • if-else 结构
      • 测试多返回值函数的错误
      • switch 结构
      • for 结构
      • Break 与 continue
      • 标签与 goto
    • 第6章:函数(function)
      • 介绍
      • 函数参数与返回值
      • 传递变长参数
      • defer 和追踪
      • 内置函数
      • 递归函数
      • 将函数作为参数
      • 闭包
      • 应用闭包:将函数作为返回值
      • 使用闭包调试
      • 计算函数执行时间
      • 通过内存缓存来提升性能
    • 第7章:数组与切片
      • 声明和初始化
      • 切片
      • For-range 结构
      • 切片重组(reslice)
      • 切片的复制与追加
      • 字符串、数组和切片的应用
    • 第8章:Map
      • 声明、初始化和 make
      • 测试键值对是否存在及删除元素
      • for-range 的配套用法
      • map 类型的切片
      • map 的排序
      • 将 map 的键值对调
    • 第9章:包(package)
      • 标准库概述
      • regexp 包
      • 锁和 sync 包
      • 精密计算和 big 包
      • 自定义包和可见性
      • 为自定义包使用 godoc
      • 使用 go install 安装自定义包
      • 自定义包的目录结构、go install 和 go test
      • 通过 Git 打包和安装
      • Go 的外部包和项目
      • 在 Go 程序中使用外部库
    • 第10章:结构(struct)与方法(method)
      • 结构体定义
      • 使用工厂方法创建结构体实例
      • 使用自定义包中的结构体
      • 带标签的结构体
      • 匿名字段和内嵌结构体
      • 方法
      • 类型的 String() 方法和格式化描述符
      • 垃圾回收和 SetFinalizer
    • 第11章:接口(interface)与反射(reflection)
      • 接口是什么
      • 接口嵌套接口
      • 类型断言:如何检测和转换接口变量的类型
      • 类型判断:type-switch
      • 测试一个值是否实现了某个接口
      • 使用方法集与接口
      • 第一个例子:使用 Sorter 接口排序
      • 第二个例子:读和写
      • 空接口
      • 反射包
      • Printf 和反射
      • 接口与动态类型
      • 总结:Go 中的面向对象
      • 结构体、集合和高阶函数
  • 第三部分:Go 高级编程
    • 第12章:读写数据
      • 读取用户的输入
      • 文件读写
      • 文件拷贝
      • 从命令行读取参数
      • 用 buffer 读取文件
      • 用切片读写文件
      • 用 defer 关闭文件
      • 使用接口的实际例子:fmt.Fprintf
      • JSON 数据格式
      • XML 数据格式
      • 用 Gob 传输数据
      • Go 中的密码学
    • 第13章:错误处理与测试
      • 错误处理
      • 运行时异常和 panic
      • 从 panic 中恢复(Recover)
      • 自定义包中的错误处理和 panicking
      • 一种用闭包处理错误的模式
      • 启动外部命令和程序
      • Go 中的单元测试和基准测试
      • 测试的具体例子
      • 用(测试数据)表驱动测试
      • 性能调试:分析并优化 Go 程序
    • 第14章:协程(goroutine)与通道(channel)
      • 并发、并行和协程
      • 协程间的信道
      • 协程的同步:关闭通道-测试阻塞的通道
      • 使用 select 切换协程
      • 通道、超时和计时器(Ticker)
      • 协程和恢复(recover)
      • 新旧模型对比:任务和worker
      • 惰性生成器的实现
      • 实现 Futures 模式
      • 复用
      • 限制同时处理的请求数
      • 链式协程
      • 在多核心上并行计算
      • 并行化大量数据的计算
      • 漏桶算法
      • 对Go协程进行基准测试
      • 使用通道并发访问对象
    • 第15章:网络、模版与网页应用
      • tcp 服务器
      • 一个简单的 web 服务器
      • 访问并读取页面数据
      • 写一个简单的网页应用
      • 确保网页应用健壮
      • 用模板编写网页应用
      • 探索 template 包
      • 精巧的多功能网页服务器
      • 用 rpc 实现远程过程调用
      • 基于网络的通道 netchan
      • 与 websocket 通信
      • 用 smtp 发送邮件
  • 第四部分:实际应用
    • 第16章:常见的陷阱与错误
      • 误用短声明导致变量覆盖
      • 误用字符串
      • 发生错误时使用 defer 关闭一个文件
      • 何时使用new()和make()
      • 不需要将一个指向切片的指针传递给函数
      • 使用指针指向接口类型
      • 使用值类型时误用指针
      • 误用协程和通道
      • 闭包和协程的使用
      • 糟糕的错误处理
    • 第17章:模式
      • 逗号 ok 模式
      • defer 模式
      • 可见性模式
      • 运算符模式和接口
    • 第18章:出于性能考虑的实用代码片段
      • 字符串
      • 数组和切片
      • 映射
      • 结构体
      • 接口
      • 函数
      • 文件
      • 协程(goroutine)与通道(channel)
      • 网络和网页应用
      • 其他
      • 出于性能考虑的最佳实践和建议
    • 第19章:构建一个完整的应用程序
      • 简介
      • 短网址项目简介
      • 数据结构
      • 用户界面:web 服务端
      • 持久化存储:gob
      • 用协程优化性能
      • 以 json 格式存储
      • 多服务器处理架构
      • 使用代理缓存
      • 总结和增强
    • 第 20 章:Go 语言在 Google App Engine 的使用
      • 什么是 Google App Engine?
      • 云上的 Go
      • 安装 Go App Engine SDK:为 Go 部署的开发环境
      • 建造你自己的 Hello world 应用
      • 使用用户服务和探索其 API
      • 处理窗口
      • 使用数据存储
      • 上传到云端
    • 第 21 章:真实世界中 Go 的使用
      • Heroku:一个使用 Go 的高度可用一致数据存储
      • MROffice:一个使用 Go 的呼叫中心网络电话 (eBook/VOIP) 系统
      • Atlassian:一个虚拟机群管理系统
      • Camilistore:一个可寻址内容存储系统
      • Go 语言的其他应用
  • 附录
    • 其他
      • 关于本文16.10.2小结糟糕错误处理的一些见解
    • A 代码引用
    • B 有趣的 Go 引用
    • C 代码示例列表
      • 目录
      • 第2章示例
      • 第3章示例
      • 第4章示例
      • 第5章示例
      • 第6章示例
      • 第7章示例
      • 第8章示例
      • 第9章示例
      • 第10章示例
      • 第11章示例
      • 第12章示例
      • 第13章示例
      • 第14章示例
      • 第15章示例
      • 第16章示例
      • 第19章示例
      • 第20章示例
    • D 书中的包引用
    • E 书中的工具引用
    • F 常见问题解答
    • G 习题答案
      • 第4章答案
      • 第5章答案
      • 第6章答案
      • 第7章答案
      • 第8章答案
      • 第9章答案
      • 第10章答案
      • 第11章答案
      • 第12章答案
      • 第13章答案
      • 第14章答案
      • 第15章答案
      • 第16章答案
      • 第19章答案
      • 第20章答案
    • H 参考文献
Powered by GitBook
On this page

Was this helpful?

  1. 第四部分:实际应用
  2. 第 21 章:真实世界中 Go 的使用

Go 语言的其他应用

PreviousCamilistore:一个可寻址内容存储系统Next其他

Last updated 2 years ago

Was this helpful?

在前面的章节中,我们只讨论了 Go 在商业环境中已经使用的许多地方中的几个。其他一些使用 Go 的机构有:

  1. :使用 Go 开发后台基础设施,主要开发者为 Gustavo Niemeyer。例如项目 Ensemble(见 )。

  2. :用 Go 发布电子书。

    FeedBooks 是一个电子书的发行商,它使用 Go 和 mgo 每天为超过一百万的图书出版提供服务。这是 Feedbooks 的研发工程师 Benoît Larroque 的一条评论:

    “mgo(一个与 MongoDB 交流的 Go 库)使我们能够每天为超过 100 万本图书出版提供服务,同时也降低我们的服务器负载。”

  3. :一个使用 Go 的分布式执行框架。这家公司的特点是高水平的服务器支持、配置应用程序设置、缓存和解决可扩展性问题。他们还可以与其他网站托管公司合作,专业地设置负载平衡、数据库集群和虚拟环境。

    为此,他们使用 Go 开发并使用 Orchestra 分布式执行框架。

    (更多信息:http://www.anchor.com.au/blog/2011/08/the-automation-waltz/)

  4. 。

    这个组织使用 Go 进行(元)数据目录的聚合和数据链接。所有现有的软件都是用 Python 写的,所以开发者可以对两者进行比较。他们的结论是:

    • Go 很简单。一旦通过了最初浅显的学习弯道,它就会像 Python 一样方便、舒适地运行。唯一的缺点是没有像 Python 那样多的库。

    • Go 是一种静态类型的语言。这似乎是一个深奥的细节,但它有一些重要的影响。在 Python 中的许多编程涉及到大量的单元和功能测试,这可能是一个相当大的负担,尽管 CKAN 测试套件有了一些重大的改进,但需要相当长的时间来运行。然而你很快就会发现,许多测试基本上是在测试动态类型 (duck typing) 和可变实体 (variable existence)(例如,当你在重构中重命名一个变量时,不确定你是否正确地重命名了一切)。在像 Go 这样的语言中,这些东西都是由编译器捕获的,不需要单独的测试。这意味着你可以少写一些测试,因为编译器本身就是一个相当强大的测试套件。

    • 尽管它是一种编译语言,但编译过程非常快,写-编译-测试 的循环并不比 Python 中的 写-测试 循环慢,因为需要运行的测试较少,如同上文所说,这个循环被进一步压缩了。

    • Go 远比 Python 更节省内存……差别是惊人的。

    • 与 Python 相比,Go 作为一种经过编译和类型检查的语言,它的速度很快。

    • Go 不是面向对象的,至少与 Python 的意义不同。相反,它有一个接口的概念。这使得设计更加简洁,因为它不鼓励复杂的多重继承类的层次结构……接口就感觉更干净一些。

    • Go 有内置的并发性。在这项工作中,有很多并行的机会,这是好的。

  5. :这家由 Kai Backman 创办的芬兰公司正在设计用于在浏览器/云端进行 3D 实体建模和打印的软件,其在客户端使用 WebGL 进行渲染。观看 了解关于这个主题的技术讲座。这是 Kai 的一句评价:

    “目前(2011 年)Go 可能是编写并发服务器的最佳语言。”

  6. :该公司是一家实时的信用机构,其使用 Go 语言对信用申请进行基于事件的后期处理。

  7. :这家塞浦路斯的 cablenet 供应商用 Go 开发了一个内部供应系统。

  8. :是一个用 Go 开发的、开源安全网络社交平台。

  9. :使用 Go 的 XML 解析器来将Medline(医学期刊的数据)的压缩 XML 文件转化到 RDF。

  10. :构建云基础设施软件。

    它用 Go 开发的第一个产品是 SimpleWorker,一个大规模的后台处理和调度系统;他们也在使用 Go 进行其他服务。

  11. :一个用Go开发的 Facebook 应用程序。这个应用程序将你的 Twitter 状态更新转贴到你的 Facebook 主页上,并允许过滤转发、提及、标签、回复等内容。

    该应用程序现在有超过 12 万名用户。

    “这是一种稳定的语言,”Michael Hoisie 说,“它可以处理负载。”

  12. 在 ,一个美国开发支持国家安全的基于科学的技术的政府机构,有很多曾经从事过编程的人都在使用这种语言。很多过去使用 C、C++、Perl、Python 或其他什么 HPC 管理软件的人,已经转而使用 Go,并且不打算回头了。

    Go 在效率、语言能力和编写代码的便利性之间找到了一个好的位置。

    —— Ron Minnich

  13. :一家网络游戏公司,为他们的后台服务使用 Go。

  14. :用 Go 重写了他们的消息和存储引擎。

  15. :用 Go 开发了分布式计算分析系统 。

  16. :使用 Go 来驱动他们的 2cloud 服务。

  17. :用 Go 开发了他们的统计和事件跟踪系统 StatHat。

最后是谷歌公司本身,它是 Go 的(发明者)之家。

“谷歌有管理应用程序和服务的人,他们需要编写工具来抓取几千台机器的状态并汇总数据,”他说,“以前,这些操作人员会用 Python 写这些东西,但他们发现 Go 在性能和实际写代码的时间方面要快得多。”

关于 Go 在企业中的使用情况,可以在 http://go-lang.cat-v.org/organizations-using-go 上找到一个全面的清单。

Go 在谷歌内部的使用是相当保密的,但在 2010 年 5 月,Rob Pike 宣布 Google 的后端基础设施正在运行用 Go 构建的应用程序()。Go 被用于一些系统(网络服务器,也包括存储系统和数据库),这些系统在跨越谷歌全球数据中心网络的分布式基础设施中发挥着作用。Go 可能会在未来几年内成为谷歌的标准后端语言。Andrew Gerrand 还说,谷歌员工正在使用 Go 来简单地从服务器上抓取信息。

上一节:

下一节:

Canonical-Ubuntu 公司
参考文献 30
FeedBooks
Anchor-Orchestra
开放知识基金会
Tinkercad 公司
视频
Clarity Services Inc.
Cablenet 通信系统有限公司
Tonika
Medline
Iron.io
SmartTweets
Sandia 国家实验室
Carbon Games
Vaba软件公司
Institute for Systems Biology
Golem
Second Bit
Numerotron Inc
参考文献 27
目录
Camilistore:一个可寻址内容存储系统
附录