鍍金池/ 教程/ GO/ 1.1 起源與發(fā)展
4.7 strings 和 strconv 包
13.6 啟動(dòng)外部命令和程序
?# 11.4 類型判斷:type-switch
12.1 讀取用戶的輸入
10.6 方法
12.2 文件讀寫
13 錯(cuò)誤處理與測試
9.3 鎖和 sync 包
12.3 文件拷貝
?# 11.7 第一個(gè)例子:使用 Sorter 接口排序
?# 11.5 測試一個(gè)值是否實(shí)現(xiàn)了某個(gè)接口
6.4 defer 和追蹤
12.10 XML 數(shù)據(jù)格式
13.10 性能調(diào)試:分析并優(yōu)化 Go 程序
?# 11.1 接口是什么
2.2 Go 環(huán)境變量
2.6 安裝目錄清單
2.5 在 Windows 上安裝 Go
11.11 Printf 和反射
1.2 語言的主要特性與發(fā)展的環(huán)境和影響因素
9.0 包(package)
7.4 切片重組(reslice)
13.2 運(yùn)行時(shí)異常和 panic
10.2 使用工廠方法創(chuàng)建結(jié)構(gòu)體實(shí)例
12.8 使用接口的實(shí)際例子:fmt.Fprintf
2.4 在 Mac OS X 上安裝 Go
3.8 Go 性能說明
7.2 切片
8.0 Map
3.1 Go 開發(fā)環(huán)境的基本要求
5.6 標(biāo)簽與 goto
6.10 使用閉包調(diào)試
9.5 自定義包和可見性
4.3 常量
?# 11.2 接口嵌套接口
6.5 內(nèi)置函數(shù)
前言
10.8 垃圾回收和 SetFinalizer
2.8 Go 解釋器
13.7 Go 中的單元測試和基準(zhǔn)測試
6.8 閉包
4.9 指針
13.1 錯(cuò)誤處理
10.1 結(jié)構(gòu)體定義
5.1 if-else 結(jié)構(gòu)
6.6 遞歸函數(shù)
9.9 通過 Git 打包和安裝
2.7 Go 運(yùn)行時(shí)(runtime)
10.7 類型的 String() 方法和格式化描述符
3.7 其它工具
9.6 為自定義包使用 godoc
11.12 接口與動(dòng)態(tài)類型
13.3 從 panic 中恢復(fù)(Recover)
10.3 使用自定義包中的結(jié)構(gòu)體
11.14 結(jié)構(gòu)體、集合和高階函數(shù)
3.6 生成代碼文檔
9.2 regexp 包
4.1 文件名、關(guān)鍵字與標(biāo)識(shí)符
?# 11.6 使用方法集與接口
7.0 數(shù)組與切片
7.1 聲明和初始化
12.11 用 Gob 傳輸數(shù)據(jù)
5.5 Break 與 continue
1.1 起源與發(fā)展
?# 11 接口(Interfaces)與反射(reflection)
6.9 應(yīng)用閉包:將函數(shù)作為返回值
4.2 Go 程序的基本結(jié)構(gòu)和要素
8.6 將 map 的鍵值對(duì)調(diào)
6.11 計(jì)算函數(shù)執(zhí)行時(shí)間
5.0 控制結(jié)構(gòu)
10.5 匿名字段和內(nèi)嵌結(jié)構(gòu)體
4.6 字符串
3.0 編輯器、集成開發(fā)環(huán)境與其它工具
13.8 測試的具體例子
7.6 字符串、數(shù)組和切片的應(yīng)用
8.4 map 類型的切片
3.9 與其它語言進(jìn)行交互
7.3 For-range 結(jié)構(gòu)
9.7 使用 go install 安裝自定義包
6.0 函數(shù)
9.8 自定義包的目錄結(jié)構(gòu)、go install 和 go test
6.3 傳遞變長參數(shù)
13.9 用(測試數(shù)據(jù))表驅(qū)動(dòng)測試
11.9 空接口
8.1 聲明、初始化和 make
6.2 函數(shù)參數(shù)與返回值
9.11 在 Go 程序中使用外部庫
3.3 調(diào)試器
4.5 基本類型和運(yùn)算符
?# 11.8 第二個(gè)例子:讀和寫
12.5 用 buffer 讀取文件
總結(jié):Go 中的面向?qū)ο?/span>
11.10 反射包
12.7 用 defer 關(guān)閉文件
9.4 精密計(jì)算和 big 包
4.4 變量
6.1 介紹
13.4 自定義包中的錯(cuò)誤處理和 panicking
12.4 從命令行讀取參數(shù)
9.10 Go 的外部包和項(xiàng)目
8.3 for-range 的配套用法
3.5 格式化代碼
10.4 帶標(biāo)簽的結(jié)構(gòu)體
7.5 切片的復(fù)制與追加
?# 11.3 類型斷言:如何檢測和轉(zhuǎn)換接口變量的類型
5.4 for 結(jié)構(gòu)
4.8 時(shí)間和日期
2.3 在 Linux 上安裝 Go
12 讀寫數(shù)據(jù)
6.12 通過內(nèi)存緩存來提升性能
9.1 標(biāo)準(zhǔn)庫概述
12.6 用切片讀寫文件
10 結(jié)構(gòu)(struct)與方法(method)
8.5 map 的排序
12.9 JSON 數(shù)據(jù)格式
13.5 一種用閉包處理錯(cuò)誤的模式
3.2 編輯器和集成開發(fā)環(huán)境
12.12 Go 中的密碼學(xué)
5.2 測試多返回值函數(shù)的錯(cuò)誤
6.7 將函數(shù)作為參數(shù)
8.2 測試鍵值對(duì)是否存在及刪除元素
3.4 構(gòu)建并運(yùn)行 Go 程序
2.1 平臺(tái)與架構(gòu)
5.3 switch 結(jié)構(gòu)

1.1 起源與發(fā)展

Go 語言起源 2007 年,并于 2009 年正式對(duì)外發(fā)布。它從 2009 年 9 月 21 日開始作為谷歌公司 20% 兼職項(xiàng)目,即相關(guān)員工利用 20% 的空余時(shí)間來參與 Go 語言的研發(fā)工作。該項(xiàng)目的三位領(lǐng)導(dǎo)者均是著名的 IT 工程師:Robert Griesemer,參與開發(fā) Java HotSpot 虛擬機(jī);Rob Pike,Go 語言項(xiàng)目總負(fù)責(zé)人,貝爾實(shí)驗(yàn)室 Unix 團(tuán)隊(duì)成員,參與的項(xiàng)目包括 Plan 9,Inferno 操作系統(tǒng)和 Limbo 編程語言;Ken Thompson,貝爾實(shí)驗(yàn)室 Unix 團(tuán)隊(duì)成員,C 語言、Unix 和 Plan 9 的創(chuàng)始人之一,與 Rob Pike 共同開發(fā)了 UTF-8 字符集規(guī)范。自 2008 年 1 月起,Ken Thompson 就開始研發(fā)一款以 C 語言為目標(biāo)結(jié)果的編譯器來拓展 Go 語言的設(shè)計(jì)思想。

這是一個(gè)由計(jì)算機(jī)領(lǐng)域 “發(fā)明之父” 所組成的黃金團(tuán)隊(duì),他們對(duì)系統(tǒng)編程語言,操作系統(tǒng)和并行都有著非常深刻的見解

http://wiki.jikexueyuan.com/project/the-way-to-go/images/1.1.designers_of_Go.jpg?raw=true" alt="" />

圖 1.1 Go 語言設(shè)計(jì)者:Griesemer、Thompson 和 Pike

在 2008 年年中,Go 語言的設(shè)計(jì)工作接近尾聲,一些員工開始以全職工作狀態(tài)投入到這個(gè)項(xiàng)目的編譯器和運(yùn)行實(shí)現(xiàn)上。Ian Lance Taylor 也加入到了開發(fā)團(tuán)隊(duì)中,并于 2008 年 5 月創(chuàng)建了一個(gè) gcc 前端。

Russ Cox 加入開發(fā)團(tuán)隊(duì)后著手語言和類庫方面的開發(fā),也就是 Go 語言的標(biāo)準(zhǔn)包。在 2009 年 10 月 30 日,Rob Pike 以 Google Techtalk 的形式第一次向人們宣告了 Go 語言的存在。

直到 2009 年 11 月 10 日,開發(fā)團(tuán)隊(duì)將 Go 語言項(xiàng)目以 BSD-style 授權(quán)(完全開源)正式公布了 Linux 和 Mac OS X 平臺(tái)上的版本。Hector Chu 于同年 11 月 22 日公布了 Windows 版本。

作為一個(gè)開源項(xiàng)目,Go 語言借助開源社區(qū)的有生力量達(dá)到快速地發(fā)展,并吸引更多的開發(fā)者來使用并改善它。自該開源項(xiàng)目發(fā)布以來,超過 200 名非谷歌員工的貢獻(xiàn)者對(duì) Go 語言核心部分提交了超過 1000 個(gè)修改建議。在過去的 18 個(gè)月里,又有 150 開發(fā)者貢獻(xiàn)了新的核心代碼。這儼然形成了世界上最大的開源團(tuán)隊(duì),并使該項(xiàng)目躋身 Ohloh 前 2% 的行列。大約在 2011 年 4 月 10 日,谷歌開始抽調(diào)員工進(jìn)入全職開發(fā) Go 語言項(xiàng)目。開源化的語言顯然能夠讓更多的開發(fā)者參與其中并加速它的發(fā)展速度。Andrew Gerrand 在 2010 年加入到開發(fā)團(tuán)隊(duì)中成為共同開發(fā)者與支持者。

在 Go 語言在 2010 年 1 月 8 日被 Tiobe(聞名于它的編程語言流行程度排名)宣布為 “2009 年年度語言” 后,引起各界很大的反響。目前 Go 語言在這項(xiàng)排名中的最高記錄是在 2017 年 1 月創(chuàng)下的第13名,流行程度 2.325%。

時(shí)間軸:

  • 2007 年 9 月 21 日:雛形設(shè)計(jì)
  • 2009 年 11 月 10日:首次公開發(fā)布
  • 2010 年 1 月 8 日:當(dāng)選 2009 年年度語言
  • 2010 年 5 月:谷歌投入使用
  • 2011 年 5 月 5 日:Google App Engine 支持 Go 語言

從 2010 年 5 月起,谷歌開始將 Go 語言投入到后端基礎(chǔ)設(shè)施的實(shí)際開發(fā)中,例如開發(fā)用于管理后端復(fù)雜環(huán)境的項(xiàng)目。有句話叫 “吃你自己的狗食”,這也體現(xiàn)了谷歌確實(shí)想要投資這門語言,并認(rèn)為它是有生產(chǎn)價(jià)值的。

Go 語言的官方網(wǎng)站是 golang.org,這個(gè)站點(diǎn)采用 Python 作為前端,并且使用 Go 語言自帶的工具 godoc 運(yùn)行在 Google App Engine 上來作為 Web 服務(wù)器提供文本內(nèi)容。在官網(wǎng)的首頁有一個(gè)功能叫做 Go Playground,是一個(gè) Go 代碼的簡單編輯器的沙盒,它可以在沒有安裝 Go 語言的情況下在你的瀏覽器中編譯并運(yùn)行 Go,它提供了一些示例,其中包括國際慣例 “Hello, World!”。

更多的信息詳見 github.com/golang/go,Go 項(xiàng)目 Bug 追蹤和功能預(yù)期詳見 github.com/golang/go/issues。

Go 通過以下的 Logo 來展示它的速度,并以囊地鼠(Gopher)作為它的吉祥物。

http://wiki.jikexueyuan.com/project/the-way-to-go/images/1.2.Go_logo.jpg?raw=true" alt="" />

圖1.2 Go 語言 Logo

谷歌郵件列表 golang-nuts 非?;钴S,每天的討論和問題解答數(shù)以百計(jì)。

關(guān)于 Go 語言在 Google App Engine 的應(yīng)用,這里有一個(gè)單獨(dú)的郵件列表 google-appengine-go,不過 2 個(gè)郵件列表的討論內(nèi)容并不是分得很清楚,都會(huì)涉及到相關(guān)的話題。go-lang.cat-v.org/ 是 Go 語言開發(fā)社區(qū)的資源站,irc.freenode.net 的#go-nuts 是官方的 Go IRC 頻道。

@golang 是 Go 語言在 Twitter 的官方帳號(hào),大家一般使用 #golang 作為話題標(biāo)簽。

這里還有一個(gè)在 Linked-in 的小組:www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr。

Go 編程語言的維基百科:en.wikipedia.org/wiki/Go_(programming_language)

Go 語言相關(guān)資源的搜索引擎頁面:gowalker.org

Go 語言還有一個(gè)運(yùn)行在 Google App Engine 上的 Go Tour,你也可以通過執(zhí)行命令 go install go-tour.googlecode.com/hg/gotour 安裝到你的本地機(jī)器上。對(duì)于中文讀者,可以訪問該指南的 中文版本,或通過命令 go install https://bitbucket.org/mikespook/go-tour-zh/gotour 進(jìn)行安裝。

鏈接