Go 编程语言规范【译】

  • 对应英文原版 为 2019 年 07 月 31 日 版本: golang.org/ref/spec
  • 翻译中针对可能有歧义/不明确/翻译后不易于理解的单词将直接使用原词汇
  • 为了行文工整,代码块内可能使用英文表述
  • 因为学习语言需要,所以翻译
  • 有些翻译可能比较迷糊,我会在进一步学习后完善它们
  • 文中实参仅代表 argument;参数仅代表 parameter,有时候也会译为形参

介绍

这是一篇 Go 编程语言的参考手册。访问 golang.org 以获取更多信息及其它文档。

Go 是一个在设计时便考虑到系统编程的通用语言。它是强类型的、带垃圾回收的并明确支持了并发编程。程序是由包所构建的,包属性支持高效的依赖管理。

语言语法紧凑且常规,以便于如集成开发环境(IDE)这样子的自动化工具所分析。

标记法

标记法语法指定使用扩展巴科斯-瑙尔范式(EBNF):

Production  = production_name …

关于 Golang 内存模型

最近开始学习 Go 语言,在看到其 内存模型 的时候一度懵逼了,主要是碰到关于信道的其中两句概念整理以为冲突了,先整理自己的理解如下。

原文

A send on a channel happens before the corresponding receive from that channel completes.

A receive from an unbuffered channel happens before the send on that channel completes.

从字面意思来看:

  1. 发送到信道的动作发生在对应的接收动作完成之前(这个是针对带缓冲区域和不带缓冲区域的)
  2. 针对不带缓冲的信道,从信道接收的动作要发生在发送数据到信道动作完成之前。

一开始怎么也无法理解,然后查到 邮件列表的讨论 ,特别注意到了 completes 这个词。 这篇对话很长,英语渣实在看不下去了 …