在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ GO/ 前言
4.7 strings 和 strconv 包
13.6 啟動(dòng)外部命令和程序
?# 11.4 類(lèi)型判斷:type-switch
12.1 讀取用戶(hù)的輸入
10.6 方法
12.2 文件讀寫(xiě)
13 錯(cuò)誤處理與測(cè)試
9.3 鎖和 sync 包
12.3 文件拷貝
?# 11.7 第一個(gè)例子:使用 Sorter 接口排序
?# 11.5 測(cè)試一個(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 語(yǔ)言的主要特性與發(fā)展的環(huán)境和影響因素
9.0 包(package)
7.4 切片重組(reslice)
13.2 運(yùn)行時(shí)異常和 panic
10.2 使用工廠(chǎng)方法創(chuàng)建結(jié)構(gòu)體實(shí)例
12.8 使用接口的實(shí)際例子:fmt.Fprintf
2.4 在 Mac OS X 上安裝 Go
3.8 Go 性能說(shuō)明
7.2 切片
8.0 Map
3.1 Go 開(kāi)發(fā)環(huán)境的基本要求
5.6 標(biāo)簽與 goto
6.10 使用閉包調(diào)試
9.5 自定義包和可見(jiàn)性
4.3 常量
?# 11.2 接口嵌套接口
6.5 內(nèi)置函數(shù)
前言
10.8 垃圾回收和 SetFinalizer
2.8 Go 解釋器
13.7 Go 中的單元測(cè)試和基準(zhǔn)測(cè)試
6.8 閉包
4.9 指針
13.1 錯(cuò)誤處理
10.1 結(jié)構(gòu)體定義
5.1 if-else 結(jié)構(gòu)
6.6 遞歸函數(shù)
9.9 通過(guò) Git 打包和安裝
2.7 Go 運(yùn)行時(shí)(runtime)
10.7 類(lèi)型的 String() 方法和格式化描述符
3.7 其它工具
9.6 為自定義包使用 godoc
11.12 接口與動(dòng)態(tài)類(lè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 編輯器、集成開(kāi)發(fā)環(huán)境與其它工具
13.8 測(cè)試的具體例子
7.6 字符串、數(shù)組和切片的應(yīng)用
8.4 map 類(lèi)型的切片
3.9 與其它語(yǔ)言進(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 傳遞變長(zhǎng)參數(shù)
13.9 用(測(cè)試數(shù)據(jù))表驅(qū)動(dòng)測(cè)試
11.9 空接口
8.1 聲明、初始化和 make
6.2 函數(shù)參數(shù)與返回值
9.11 在 Go 程序中使用外部庫(kù)
3.3 調(diào)試器
4.5 基本類(lèi)型和運(yùn)算符
?# 11.8 第二個(gè)例子:讀和寫(xiě)
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 類(lèi)型斷言:如何檢測(cè)和轉(zhuǎn)換接口變量的類(lèi)型
5.4 for 結(jié)構(gòu)
4.8 時(shí)間和日期
2.3 在 Linux 上安裝 Go
12 讀寫(xiě)數(shù)據(jù)
6.12 通過(guò)內(nèi)存緩存來(lái)提升性能
9.1 標(biāo)準(zhǔn)庫(kù)概述
12.6 用切片讀寫(xiě)文件
10 結(jié)構(gòu)(struct)與方法(method)
8.5 map 的排序
12.9 JSON 數(shù)據(jù)格式
13.5 一種用閉包處理錯(cuò)誤的模式
3.2 編輯器和集成開(kāi)發(fā)環(huán)境
12.12 Go 中的密碼學(xué)
5.2 測(cè)試多返回值函數(shù)的錯(cuò)誤
6.7 將函數(shù)作為參數(shù)
8.2 測(cè)試鍵值對(duì)是否存在及刪除元素
3.4 構(gòu)建并運(yùn)行 Go 程序
2.1 平臺(tái)與架構(gòu)
5.3 switch 結(jié)構(gòu)

前言

用更少的代碼,更短的編譯時(shí)間,創(chuàng)建運(yùn)行更快的程序,享受更多的樂(lè)趣

對(duì)于學(xué)習(xí) Go 編程語(yǔ)言的愛(ài)好者來(lái)說(shuō),這本書(shū)無(wú)疑是最適合你的一本書(shū)籍,這里包含了當(dāng)前最全面的學(xué)習(xí)資源。本書(shū)通過(guò)對(duì)官方的在線(xiàn)文檔、名人博客、書(shū)籍、相關(guān)文章以及演講的資料收集和整理,并結(jié)合我自身在軟件工程、編程語(yǔ)言和數(shù)據(jù)庫(kù)開(kāi)發(fā)的授課經(jīng)驗(yàn),將這些零碎的知識(shí)點(diǎn)組織成系統(tǒng)化的概念和技術(shù)分類(lèi)來(lái)進(jìn)行講解。

隨著軟件規(guī)模的不斷擴(kuò)大,諸多的學(xué)者和谷歌的開(kāi)發(fā)者們?cè)诠緝?nèi)部的軟件開(kāi)發(fā)過(guò)程中開(kāi)始經(jīng)歷大量的挫折,在諸多問(wèn)題上都不能給出令人滿(mǎn)意的解決方案,尤其是在使用 C++ 來(lái)開(kāi)發(fā)大型的服務(wù)端軟件時(shí),情況更是不容樂(lè)觀。由于二進(jìn)制文件一般都是非常巨大的,因此需要耗費(fèi)大量的時(shí)間在編譯這些文件上,同時(shí)編程語(yǔ)言的設(shè)計(jì)思想也已經(jīng)非常陳舊,這些情況都充分證明了現(xiàn)有的編程語(yǔ)言已不符合時(shí)下的生產(chǎn)環(huán)境。盡管硬件在過(guò)去的幾十年中有了飛速的發(fā)展,但人們依舊沒(méi)有找到機(jī)會(huì)去改變 C++ 在軟件開(kāi)發(fā)的重要地位,并在實(shí)際開(kāi)發(fā)過(guò)程中忍受著它所帶來(lái)的令人頭疼的一些問(wèn)題。因此學(xué)者們坐下來(lái)總結(jié)出了現(xiàn)在生產(chǎn)環(huán)境與軟件開(kāi)發(fā)之間的主要矛盾,并嘗試設(shè)計(jì)一門(mén)全新的編程語(yǔ)言來(lái)解決這些問(wèn)題。

以下就是他們討論得出的對(duì)編程語(yǔ)言的設(shè)計(jì)要求:

  • 能夠以更快的速度開(kāi)發(fā)軟件
  • 開(kāi)發(fā)出的軟件能夠很好地在現(xiàn)代的多核計(jì)算機(jī)上工作
  • 開(kāi)發(fā)出的軟件能夠很好地在網(wǎng)絡(luò)環(huán)境下工作
  • 使人們能夠享受軟件開(kāi)發(fā)的過(guò)程

Go 語(yǔ)言就在這樣的環(huán)境下誕生了,它讓人感覺(jué)像是 Python 或 Ruby 這樣的動(dòng)態(tài)語(yǔ)言,但卻又擁有像 C 或者 Java 這類(lèi)語(yǔ)言的高性能和安全性。

Go 語(yǔ)言出現(xiàn)的目的是希望在編程領(lǐng)域創(chuàng)造最實(shí)用的方式來(lái)進(jìn)行軟件開(kāi)發(fā)。它并不是要用奇怪的語(yǔ)法和晦澀難懂的概念來(lái)從根本上推翻已有的編程語(yǔ)言,而是建立并改善了 C、Java、C# 中的許多語(yǔ)法風(fēng)格。它提倡通過(guò)接口來(lái)針對(duì)面向?qū)ο缶幊?,通過(guò) goroutine 和 channel 來(lái)支持并發(fā)和并行編程。

這本書(shū)是為那些想要學(xué)習(xí) Go 這門(mén)全新的,迷人的和充滿(mǎn)希望的編程語(yǔ)言的開(kāi)發(fā)者量身定做的。當(dāng)然,你在學(xué)習(xí) Go 語(yǔ)言之前需要具備一些關(guān)于編程的基礎(chǔ)知識(shí)和經(jīng)驗(yàn),并且擁有合適的學(xué)習(xí)環(huán)境,但你并不需要對(duì) C 或者 Java 或其它類(lèi)似的語(yǔ)言有非常深入的了解。

對(duì)于那些熟悉 C 或者面向?qū)ο缶幊陶Z(yǔ)言的開(kāi)發(fā)者,我們將會(huì)在本書(shū)中用 Go 和一些編程語(yǔ)言的相關(guān)概念進(jìn)行比較(書(shū)中會(huì)使用大家所熟知的縮寫(xiě) “OO” 來(lái)表示面向?qū)ο螅?/p>

本書(shū)將會(huì)從最基礎(chǔ)的概念講起,同時(shí)也會(huì)討論一些類(lèi)似在應(yīng)用 goroutine 和 channel 時(shí)有多少種不同的模式,如何在 Go 語(yǔ)言中使用谷歌 API,如何操作內(nèi)存,如何在 Go 語(yǔ)言中進(jìn)行程序測(cè)試和如何使用模板來(lái)開(kāi)發(fā) Web 應(yīng)用這些高級(jí)概念和技巧。

在本書(shū)的第一部分,我們將會(huì)討論 Go 語(yǔ)言的起源(第 1 章),以及如何安裝 Go 語(yǔ)言(第 2 章)和開(kāi)發(fā)環(huán)境(第 3 章)。

在本書(shū)的第二部分,我們將會(huì)帶領(lǐng)你貫穿 Go 語(yǔ)言的核心思想,譬如簡(jiǎn)單與復(fù)雜類(lèi)型(第 4、7、8 章),控制結(jié)構(gòu)(第 5 章),函數(shù)(第 6 章),結(jié)構(gòu)與方法(第 10 章)和接口(第 11 章)。我們會(huì)對(duì) Go 語(yǔ)言的函數(shù)式和面向?qū)ο缶幊踢M(jìn)行透徹的講解,包括如何使用 Go 語(yǔ)言來(lái)構(gòu)造大型項(xiàng)目(第 9 章)。

在本書(shū)的第三部分,你將會(huì)學(xué)習(xí)到如何處理不同格式的文件(第 12 章)和如何在 Go 語(yǔ)言中巧妙地使用錯(cuò)誤處理機(jī)制(第 13 章)。然后我們會(huì)對(duì) Go 語(yǔ)言中最值得稱(chēng)贊的設(shè)計(jì) goroutine 和 channel 進(jìn)行并發(fā)和多核應(yīng)用的基本技巧的講解(第 14 章)。最后,我們會(huì)討論如何將 Go 語(yǔ)言應(yīng)用到分布式和 Web 應(yīng)用中的相關(guān)網(wǎng)絡(luò)技巧(第 15 章)。

我們會(huì)在本書(shū)的第四部分向你展示許多 Go 語(yǔ)言的開(kāi)發(fā)模式和一些編碼規(guī)范,以及一些非常有用的代碼片段(第 18 章)。在前面章節(jié)完成對(duì)所有的 Go 語(yǔ)言技巧的學(xué)習(xí)之后,你將會(huì)學(xué)習(xí)如何構(gòu)造一個(gè)完整 Go 語(yǔ)言項(xiàng)目(第 19 章),然后我們會(huì)介紹一些關(guān)于 Go 語(yǔ)言在云(Google App Engine)方面的應(yīng)用(第 20 章)。在本書(shū)的最后一章(第 21 章),我們會(huì)討論一些在全世界范圍內(nèi)已經(jīng)將 Go 語(yǔ)言投入實(shí)際開(kāi)發(fā)的公司和組織。本書(shū)將會(huì)在最后給出一些對(duì) Go 語(yǔ)言愛(ài)好者的引用,Go 相關(guān)包和工具的參考,以及章節(jié)練習(xí)的答案和所有參考資源和文獻(xiàn)的清單。

Go 語(yǔ)言有一個(gè)被稱(chēng)之為 “沒(méi)有廢物” 的宗旨,就是將一切沒(méi)有必要的東西都去掉,不能去掉的就無(wú)底線(xiàn)地簡(jiǎn)化,同時(shí)追求最大程度的自動(dòng)化。他完美地詮釋了敏捷編程的 KISS 秘訣:短小精悍!

Go 語(yǔ)言通過(guò)改善或去除在 C、C++ 或 Java 中的一些所謂“開(kāi)放”特性來(lái)讓開(kāi)發(fā)者們的工作更加便利。這里只舉例其中的幾個(gè),比如對(duì)于變量的默認(rèn)初始化,內(nèi)存分配與自動(dòng)回收,以及更簡(jiǎn)潔卻不失健壯的控制結(jié)構(gòu)。同時(shí)我們也會(huì)發(fā)現(xiàn) Go 語(yǔ)言旨在減少不必要的編碼工作,這使得 Go 語(yǔ)言的代碼更加簡(jiǎn)潔,從而比傳統(tǒng)的面向?qū)ο笳Z(yǔ)言更容易閱讀和理解。

與 C++ 或 Java 這些有著龐大體系的語(yǔ)言相比,Go 語(yǔ)言簡(jiǎn)潔到可以將它整個(gè)的裝入你的大腦中,而且比學(xué)習(xí) Scala(Java 的并發(fā)語(yǔ)言)有更低的門(mén)檻,真可謂是 21 世紀(jì)的 C 語(yǔ)言!

作為一門(mén)系統(tǒng)編程語(yǔ)言,你不應(yīng)該為 Go 語(yǔ)言的大多數(shù)代碼示例和練習(xí)都和控制臺(tái)有著密不可分的關(guān)系而感到驚奇,因?yàn)樘峁┢脚_(tái)依賴(lài)性的 GUI(用戶(hù)界面)框架并不是一個(gè)簡(jiǎn)單的任務(wù)。有許多由第三方發(fā)起的 GUI 框架項(xiàng)目正在如火如荼地進(jìn)行中,或許我們會(huì)在不久的將來(lái)看到一些可用的 Go 語(yǔ)言 GUI 框架。不過(guò)現(xiàn)階段的 Go 語(yǔ)言已經(jīng)提供了大量有關(guān) Web 方面的功能,我們可以通過(guò)它強(qiáng)大的 http 和 template 包來(lái)達(dá)到 Web 應(yīng)用的 GUI 實(shí)現(xiàn)。

我們會(huì)經(jīng)常涉及到一些關(guān)于 Go 語(yǔ)言的編碼規(guī)范,了解和使用這些已經(jīng)被廣泛認(rèn)同的規(guī)范應(yīng)該是你學(xué)習(xí)階段最重要的實(shí)踐。我會(huì)在書(shū)中盡量使用已經(jīng)講解的概念或者技巧來(lái)解釋相關(guān)的代碼示例,以避免你在不了解某些高級(jí)概念的情況下而感到迷茫。

我們通過(guò) 227 個(gè)完整的代碼示例和書(shū)中的解釋說(shuō)明來(lái)對(duì)所有涉及到的概念和技巧進(jìn)行徹底的講解,你可以下載這些代碼到你的電腦上運(yùn)行,從而加深對(duì)概念的理解。

本書(shū)會(huì)盡可能地將前后章節(jié)的內(nèi)容聯(lián)系起來(lái),當(dāng)然這也同時(shí)要求你通過(guò)學(xué)習(xí)不同的知識(shí)來(lái)對(duì)一個(gè)問(wèn)題提出盡可能多的解決方案。記住,學(xué)習(xí)一門(mén)新語(yǔ)言的最佳方式就是實(shí)踐,運(yùn)行它的代碼,修改并嘗試更多的方案。因此,你絕對(duì)不可以忽略書(shū)中的 130 個(gè)代碼練習(xí),這將對(duì)你學(xué)習(xí)好 Go 語(yǔ)言有很大的幫助。比如,我們就為斐波那契算法提供了 13 個(gè)不同的版本,而這些版本都使用了不同的概念和技巧。

你可以通過(guò)訪(fǎng)問(wèn)本書(shū)的 官方網(wǎng)站 下載書(shū)中的代碼(譯者注:所有代碼文件已經(jīng)包括在 GitHub 倉(cāng)庫(kù)中),并獲得有關(guān)本書(shū)的勘誤情況和內(nèi)容更新。

為了讓你在成為 Go 語(yǔ)言大師的道路上更加順利,我們會(huì)專(zhuān)注于一些特別的章節(jié)以提供 Go 語(yǔ)言開(kāi)發(fā)模式的最佳實(shí)踐,同時(shí)也會(huì)幫助初學(xué)者逃離一些語(yǔ)言的陷阱。第 18 章可以作為你在開(kāi)發(fā)時(shí)的一個(gè)參考手冊(cè),因?yàn)楫?dāng)中包含了眾多的有價(jià)值的代碼片段以及相關(guān)的解釋說(shuō)明。

最后要說(shuō)明的是,你可以通過(guò)完整的索引來(lái)快速定位你需要閱讀的章節(jié)。書(shū)中所有的代碼都在 Go1.4 版本下測(cè)試通過(guò)。

這里有一段來(lái)自在 C++、Java 和 Python 領(lǐng)域眾所周知的專(zhuān)家 Bruce Eckel 的評(píng)論:

“作為一個(gè)有著 C/C++ 背景的開(kāi)發(fā)者,我在使用 Go 語(yǔ)言時(shí)仿佛呼吸到了新鮮空氣一般,令人心曠神怡。我認(rèn)為使用 Go 語(yǔ)言進(jìn)行系統(tǒng)編程開(kāi)發(fā)比使用 C++ 有著更顯著的優(yōu)勢(shì),因?yàn)樗诮鉀Q一些很難用 C++ 解決的問(wèn)題的同時(shí),讓我的工作變得更加高效。我并不是說(shuō) C++ 的存在是一個(gè)錯(cuò)誤,相反地,我認(rèn)為這是歷史發(fā)展的必然結(jié)果。當(dāng)我深陷在 C 語(yǔ)言這門(mén)略微比匯編語(yǔ)言好一點(diǎn)的泥潭時(shí),我堅(jiān)信任何語(yǔ)言的構(gòu)造都不可能支持大型項(xiàng)目的開(kāi)發(fā)。像垃圾回收或并發(fā)語(yǔ)言支持這類(lèi)東西,在當(dāng)時(shí)都是極其荒謬的主意,根本沒(méi)有人在乎。C++ 向大型項(xiàng)目開(kāi)發(fā)邁出了重要的第一步,帶領(lǐng)我們走進(jìn)這個(gè)廣袤無(wú)垠的世界。很慶幸 Stroustrup 做了讓 C++ 兼容 C 語(yǔ)言以能夠讓其編譯 C 程序這個(gè)正確的決定。我們當(dāng)時(shí)需要 C++ 的出現(xiàn)。”

“之后我們學(xué)到了更多。我們毫無(wú)疑問(wèn)地接受了垃圾回收,異常處理和虛擬機(jī)這些當(dāng)年人們認(rèn)為只有瘋子才會(huì)想的東西。C++ 的復(fù)雜程度(新版的 C++ 甚至更加復(fù)雜)極大的影響了軟件開(kāi)發(fā)的高效性,這使得它再也不再適合這個(gè)時(shí)代。人們不再像過(guò)往那樣認(rèn)同在 C++ 中兼容使用 C 語(yǔ)言的方法,認(rèn)為這些工作只是在浪費(fèi)時(shí)間,犧牲人們的努力。就在此時(shí),Go 語(yǔ)言已經(jīng)成功地解決了 C++ 中那些本打算解決卻未能解決的關(guān)鍵問(wèn)題。”

我非常想要向發(fā)明這門(mén)精湛的語(yǔ)言的 Go 開(kāi)發(fā)團(tuán)隊(duì)表示真摯的感謝,尤其是團(tuán)隊(duì)的領(lǐng)導(dǎo)者 Rob Pike、Russ Cox 和 Andrew Gerrand,他們闡述的例子和說(shuō)明都非常的完美。同時(shí),我還要感謝 Miek Gieben、Frank Muller、Ryanne Dolan 和 Satish V.J. 給予我巨大的幫助,還有那些 golang-nuts 郵件列表里的所有的成員。

歡迎來(lái)到 Go 語(yǔ)言開(kāi)發(fā)的奇妙世界!

鏈接