Go程序設計語言(英文版)

Go程序設計語言(英文版) 下載 mobi epub pdf 電子書 2025

[美] 艾倫A.A.多諾萬 等 著
圖書標籤:
  • Go
  • 編程
  • 軟件開發
  • 計算機科學
  • 英文
  • 技術
  • 編程語言
  • 算法
  • 數據結構
  • 並發編程
想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 機械工業齣版社
ISBN:9787111526285
版次:1
商品編碼:11864836
品牌:機工齣版
包裝:平裝
叢書名: 經典原版書庫
開本:16開
齣版時間:2016-01-01
用紙:膠版紙
頁數:366

具體描述

編輯推薦

  繼承K&R;精髓的Go語言編程聖經,《C程序設計語言》的作者Kernighan教授與榖歌Go開發團隊核心成員Donovan聯閤編寫。

  凝聚大師畢生造詣,融閤Go開發團隊智慧,經典與權*的碰撞,打造Go語言編程聖經。

  盡得《C程序設計語言》的精髓,簡潔實用,字字珠璣,學習Go語言程序設計的權*指南。

內容簡介

  Go語言是榖歌推齣的一種全新的C語言風格的編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性,提高編程效率,適閤開發大型軟件,有望成為主流的編程語言。本書由《C程序設計語言》的作者Kernighan和榖歌公司Go團隊閤作編寫而成,是關於Go語言編程的著作。

目錄

第1章 綜述 1
1.1 Hello,World 1
1.2 命令行參數 4
1.3 查找重復行 8
1.4 GIF動畫 13
1.5 獲取一個URL 15
1.6 並發獲取多個URL 17
1.7 實現一個Web服務器 19
1.8 雜項 23
第2章 程序結構 27
2.1 名字 27
2.2 聲明 28
2.3 變量 30
2.4 賦值 36
2.5 類型聲明 39
2.6 包和文件 41
2.7 作用域 45
第3章 基本數據類型 51
3.1 整數 51
3.2 浮點數 56
3.3 復數 61
3.4 布爾量 63
3.5 字符串 64
3.6 常量 75
第4章 復閤類型 81
4.1 數組 81
4.2 切片 84
4.3 鍵值對 93
4.4 結構體 99
4.5 JSON 107
4.6 文本和HTML模闆 113
第5章 函數 119
5.1 函數聲明 119
5.2 遞歸 121
5.3 多返迴值 124
5.4 錯誤 127
5.5 作為值的函數 132
5.6 匿名函數 135
5.7 變參函數 142
5.8 延後函數調用 143
5.9 崩潰 148
5.10 恢復 151
第6章 方法 155
6.1 方法聲明 155
6.2 帶有指針接收器的方法 158
6.3 包含嵌入結構體的復閤類型 161
6.4 作為值和錶達式的方法 164
6.5 示例:位嚮量類型 165
6.6 封裝 168
第7章 接口 171
7.1 作為規約的接口 171
7.2 接口類型 174
7.3 接口約定的達成 175
7.4 使用flag.Value進行標誌位分析 179
7.5 作為值的接口 181
7.6 使用sort.Interface進行排序 186
7.7 http.Handler接口 191
7.8 錯誤接口 196
7.9 示例:錶達式評估器 197
7.10 類型斷言 205
7.11 使用類型斷言分辨錯誤 206
7.12 使用接口類型斷言查詢行為 208
7.13 按類型的程序分支 210
7.14 示例:基於標記符號的XML解碼 213
7.15 幾句建議 216
第8章 goroutine和信道 217
8.1 goroutine 217
8.2 示例:並發時鍾服務器 219
8.3 示例:並發迴聲服務器 222
8.4 信道 225
8.5 並行循環 234
8.6 示例:並發Web爬蟲 239
8.7 使用select實現多工 244
8.8 示例:並發目錄遍曆 247
8.9 取消執行 251
8.10 示例:聊天服務器 253
第9章 使用共享變量實現並發 257
9.1 競險 257
9.2 互斥量:sync.Mutex 262
9.3 讀寫互斥量:sync.RWMutex 266
9.4 內存同步 267
9.5 緩式初始化:sync.Once 268
9.6 競險檢測器 271
9.7 示例:並發無阻塞式高速緩存 272
9.8 goroutine和綫程 280
第10章 包和go工具 283
10.1 概述 283
10.2 導入路徑 284
10.3 包聲明 285
10.4 導入聲明 285
10.5 空導入 286
10.6 包和命名 289
10.7 go工具 290
第11章 測試 301
11.1 go test工具 302
11.2 測試函數 302
11.3 覆蓋率 318
11.4 性能基準函數 321
11.5 性能剖析 323
11.6 示例函數 326
第12章 反射 329
12.1 為什麼會引入反射概念 329
12.2 reflect.Type和reflect.Value 330
12.3 遞歸值輸齣Display 333
12.4 示例:對S-錶達式編碼 338
12.5 使用reflect.Value給變量設置值 341
12.6 示例:對S-錶達式解碼 344
12.7 訪問結構體域標簽 348
12.8 列齣類型的方法 351
12.9 幾句忠告 352
第13章 低階程序設計 353
13.1 unsafe.Sizeof、Alignof和Offsetof 354
13.2 unsafe.Pointer 356
13.3 示例:深等價 358
13.4 使用cgo調用C代碼 361
13.5 再來幾句忠告 366
1. Tutoria 1
1.1. Hello, World1
1.2.?Command?L?ineArguments?4
1.3.?FindingDup?lic?ateLines?8
1.4.?Animated?GIFs?13
1.5.?FetchingaURL?15
1.6.?FetchingURLs?Con?cur?rently17
1.7.?AWe?bServer?19
1.8.?Loose?End?s232.?
2.?ProgramStr?ucture27
2.1.?Names?27
2.2.?Declarat?ions?28
2.3.?Var?iables?30
2.4.?Assig?nments?36
2.5.?Typ?eDecl?arat?ions?39
2.6.?Packages?andFiles?41
2.7.?Scope?45
3.?Basic?Data?Typ?es51
3.1.?Int?egers?51
3.2.?Float?ing?Point?Numbers?56
3.3.?Complex?Numbers?61
3.4.?Boole?ans63
3.5.?Str?ings64
3.6.?Con?stants75
4.?Com?positeTyp?es81
4.1.?Arrays?81
4.2.?Slices?84
4.3.?Maps?93
4.4.?Str?ucts99
4.5.?JSON107
4.6.?Text?andHTMLTempl?ates113
5.?Func?tions?119
5.1.?FunctionDeclarat?ions?119
5.2.?Rec?ursio 121
5.3..MultipleReturn Values.124
5.4..Errors 127
5.5..FunctionValues.132
5.6..Anonymous Functions.135
5.7..Variadic.Functions.142
5.8..Deferred.FunctionCalls 143
5.9..Panic.148
5.10..Recover 151
6..Methods 155
6.1..Method.Declarations.155
6.2..MethodswithaPointerReceiver 158
6.3..ComposingTypesby.Struct.Embedding 161
6.4..Method.Values.andExpressions.164
6.5..Example:.Bit.Vector.Type 165
6.6..Encapsulation 168
7..Interfaces 171
7.1..Interfaces.as.Contracts 171
7.2..Interface.Types 174
7.3..Interface.Satisfaction 175
7.4..ParsingFlags.withflag.Value 179
7.5..Interface.Values.181
7.6..Sortingwithsort.Interface 186
7.7..The http.Handler Interface.191
7.8..The error Interface.196
7.9..Example:.ExpressionEvaluator 197
7.10..Type Assertions.205
7.11..DiscriminatingErrorswith.TypeAssertions.206
7.12..QueryingBehaviorswith.Interface.TypeAssertions.208
7.13..Type Switches 210
7.14..Example:.Token-Based.XML.Decoding 213
7.15..AFew Words.ofAdvice.216
8..Goroutines.and.Channels.217
8.1..Goroutines 217
8.2..Example:.ConcurrentClockServer.219
8.3..Example:.ConcurrentEcho Server.222
8.4..Channels 225
8.5..Looping.inParallel 234
8.6..Example:.ConcurrentWeb.Crawler 239
8.7..Multiplexingwithselect 244
8.8..Example:.ConcurrentDirectoryTraversal 247
8.9..Cancellation 251
8.10..Example:.ChatSer.ver.253
9..Concurrency.withShared.Vari.ables 257
9.1..Race.Con.dit.ion.s 257
9.2..Mut.ual.Exc.lusion:sync.Mutex 262
9.3..Read/Write.Mut.exes:sync.RWMutex 266
9.4..Memor.ySy.nchro.nizat.ion 267
9.5..Lazy.Initializat.ion:sync.Once 268
9.6..TheRace.Detec.tor.271
9.7..Example:.Con.cur.rentNon-Blo.cking.Cache.272
9.8..Goroutinesand.Threads.280
10..Pack.ages and.the.GoTool 283
10.1..Int.roduc.tion 283
10.2..Imp.ort.Pat.hs 284
10.3..ThePackageDeclarat.ion 285
10.4..Imp.ort.Declarat.ions.285
10.5..Blank.Imp.orts 286
10.6..Packages.andNaming 289
10.7..TheGoTool 290
11..Testing.301
11.1..The go.test To.ol 302
11.2. Test Func.tions.302
11.3..Cov.erage 318
11.4. Benchmark Func.tions.321
11.5..Pro.ling 323
11.6. Example Func.tions.326
12..Re.ecti.on 329
12.1..Why.Re.ec.tion? 329
12.2. reflect.Type and reflect.Value 330
12.3. Display,aRec.ursiveValue.Print.er 333
12.4..Example:.Enco.dingS-E.xpressions.338
12.5..Setting.Var.iables.wit.hreflect.Value 341
12.6..Example:.DecodingS-E.xpressions.344
12.7..AccessingStr.uct.Field.Tags.348
12.8..Displaying.the.Met.hodsofaTyp.e 351
12.9..AWo.rdofCaution.352
13..Low-L.evel.Pro.gramming 353
13.1. unsafe.Sizeof, Alignof,and Offsetof 354
13.2. unsafe.Pointer 356
13.3..Example:.DeepEquivalence.358
13.4..Cal.lingCCodewit.hcgo 361
13.5..Another.WordofCaution.366

前言/序言

  “Go是一種開放源代碼的程序設計語言,它意在使得人們能夠方便地構建簡單、可靠、高效的軟件。”(來自Go官網golang.org)Go形成構想是在2007年9月,並於2009年11月發布,其發明人是Robert Griesemer、Rob Pike和Ken Thompson,這幾位都任職於Google。該語言及其配套工具集意在使得編譯和執行都能夠富有錶達力和效率,而且使得程序員能夠輕鬆寫齣可靠、健壯的程序。
  Go和C從錶麵上看起來相似,而且和C一樣,它也是一種專業程序員使用的工具,兼有事半功倍之效。但是Go遠不止是C的一種升級版本。它從多種其他語言中藉用和改造瞭不少好的思想,還避開瞭那些導緻復雜和脆弱的語言特性。它為並發提供的設施是全新的、高效的,它實現數據抽象和麵嚮對象的途徑是極其靈活的。它還提供瞭自動化的內存管理,或稱為垃圾收集。
  Go特彆適用於構建基礎設施類軟件(如網絡服務器),以及程序員使用的工具和係統等。但它的的確確是一種通用語言,而且在諸多領域(如圖像處理、移動應用和機器學習)中都能發現它的身影。它在很多場閤下被用於替換無類型的腳本語言,這是由於它平衡瞭錶達力和安全性:Go程序通常比動態語言程序運行速度要快,遭遇意料之外的類型錯誤而導緻的崩潰更是少得多。
  Go是個開源項目,所以其編譯器、庫和工具的源代碼是所有人皆可免費取得的。來自全世界的社區都在積極地嚮這個項目貢獻代碼。Go的運行環境包括類UNIX係統—Linux、FreeBSD、OpenBSD和Mac OS X,還有Plan 9和Microsoft Windows。隻要在這些環境之一中寫瞭一個程序,那麼基本上不加修改就可以運行在其他環境中。
  本書旨在幫助你立刻開始使用Go,以及良好地掌握這門語言,並充分地利用Go的語言特性和標準庫來撰寫清晰的、符閤習慣用法的、高效的程序。
  Go的起源和生物學物種一樣,成功的語言會繁衍後代,這些後代語言會從它們的祖先那裏汲取各種優點;有時候,語言間的混血會産生異常強大的力量;在一些罕見情況下,某個重大的語言特性也可能憑空齣現而並無先例。通過考察語言間的影響,我們可以學得不少知識,比如語言為什麼會變成這個樣子,以及它適配過哪些環境,等等。
  下圖展示瞭更早齣現的程序設計語言對Go産生的最重要影響。
  Go有時會被稱為“類C語言”或“21世紀的C”。從C中,Go繼承瞭錶達式語法、控製流語句、基本數據類型、按值調用的形參傳遞、指針,但比這些更重要的是,繼承瞭C所強調的程序要編譯成高效的機器碼,並自然地與所處的操作係統提供的抽象機製相配閤。
  可是,Go的傢譜中還有其他祖先。産生主要影響的是來自Niklaus Wirth設計的、以Pascal為發端的一個語言支流。Modula-2啓發瞭包概念。Oberon消除瞭模塊接口文件和模塊實現文件的區隔。Oberon-2影響瞭包、導入和聲明語法。Object Oberon則提供瞭方法聲明語法。
  另一支Go的世係祖先,也是使得Go相對於當下的程序設計顯得卓然不群者,是一族名不見經傳的、在貝爾實驗室開發的研究用語言。這些語言都受到瞭Tony Hoare於1978年發錶的關於並發性基礎的開創性論文所提齣的通信順序進程(Communicating Sequential Process,CSP)的啓發。在CSP中,程序就是一組無共享狀態進程的並行組閤,進程間的通信和同步采用信道完成。不過,Hoare提齣的CSP是一種形式語言,僅用以描述並發性的基本概念,並不是一種用來撰寫可執行程序的程序設計語言。
  Rob Pike等人開始動手做一些實驗,嘗試把CSP實現為真正的語言。第一種這樣的語言稱為Squeak(“和鼠類溝通的語言”),它是一種用以處理鼠標和鍵盤事件的語言。緊接著它的是Newsqueak,它帶來的是類C的語句和錶達式語法,以及類Pascal的類型記法。它是一種純粹的函數式語言,帶有垃圾收集,同樣也以管理鍵盤、鼠標和窗口事件為目標。信道成瞭一等值(first-class value),它可以動態創建並采用變量存儲。
  Plan 9操作係統將這些思想都納入瞭一種稱為Alef的語言。Alef嘗試將Newsqueak改造成一種可用的係統級程序設計語言,但垃圾收集的缺失使得它在處理並發性時太過痛苦瞭。
  Go中的其他結構也會在這裏或那裏顯示齣某些並非來自祖先的基因。例如,iota多多少少有點APL的影子,而嵌套函數的詞法作用域則來自Scheme(以及由之而來的大部分語言)。在Go語言中,也可以發現全新的變異。Go的創新性的切片為動態數組提供瞭高效的隨機訪問的同時,也允許舊式鏈錶的復雜共享機製。還有,defer語句也是Go中新引入的。
  Go項目所有的程序設計語言都反映瞭其發明者的程序設計哲學,這其中往往有相當大的一部分是對於此前的語言已知缺點的應對措施。Go這個項目也是誕生於挫敗感之中的,這種挫敗感來源於Google的若乾遭遇瞭復雜性爆炸性增長的軟件係統。(而這個問題絕非Google所獨有的。)“復雜性是以乘積方式增長的。”Rob Pike如是說。為瞭修復某個問題,一點點地將係統的某個部分變得更加復雜,這不可避免地也給其他部分增加瞭復雜性。在不斷要求增加係統功能和選項以及配置,還要快速發布的壓力之下,簡單性往往被忽視瞭—盡管長期來看,簡單性纔是好軟件的不二法門。
  要實現簡單性,就要求在項目的一開始就將思想濃縮至本質,並在項目的整個生命期多保持一些自律,認識到哪些變化是好的,哪些是壞的或緻命的。隻要投入足夠的努力,好的變化就既可以實現目的,又能夠不損害軟件設計上的Fred Brooks所謂的“概念完整性”。壞的變化就做不到這一點,而緻命的變化則會犧牲“簡單性”而去換得其淺薄的兄弟概念—“方便性”。但是,隻有通過設計上的簡單性,係統纔能在增長過程中保持穩定、安全和自洽。
  Go項目不僅僅包括語言本身、它的工具和標準庫,還有決不能忽視的一點,就是它保持極端簡單性的行為文化。在高級語言中,Go齣現得較晚,因而有一定後發優勢,它的基礎部分實現得不錯:有垃圾收集、包係統、一等函數、詞法作用域、係統調用接口,還有不可變的、默認用UTF-8編碼的字符串。但相對來說,它的語言特性不多,而且不太會增加新特性瞭。比如說,它沒有隱式數值類型強製轉換,沒有構造或析構函數,沒有運算符重載,沒有形參默認值,沒有繼承,沒有泛型,沒有異常,沒有宏,沒有函數注記,沒有綫程局部存儲。這門語言成熟而穩定,並且保證兼容更早版本:在舊版本的Go語言中寫的程序,可以在新版本的編譯器和標準庫下編譯和運行。
  Go的類型係統足可以使程序員避免在動態語言中會無意犯下的絕大多數錯誤,但相對而言,它在帶類型的語言中又算是類型係統比較簡單的。其實現手法有時候會導緻類型框架林立卻彼此孤立的“無類型”程序設計風格,並且Go程序員不會在類型方麵走到C++或Haskell程序員的那一步—重度地錶達類型安全性作為語言具備類型基礎的證據。但在實際工作中,Go卻能為程序員提供具備相當強類型的係統纔能實現的安全性和運行時性能,而不讓程序員承擔這種係統的復雜性。
  Go提倡充分利用當代計算機係統設計,尤其強調局部性的重要。其內建數據類型和大多數庫數據結構都經過仔細設計,力求以自然方式工作,而不要求顯式的初始化或隱式的構造函數。這麼一來,隱藏在代碼中的內存分配和內存寫入就大大減少瞭。Go中的聚閤類型(結構體和數組)都是以直接方式持有其元素,需要更少的存儲以及比使用間接域的語言還少的分配動作和間接指針。由於現代計算機都是並行工作的,正如前麵提到的那樣,Go有著基於CSP的並行特性。Go還提供瞭變長棧來運行其輕量級綫程,或稱為goroutine。這個棧初始化時非常小,所以創建一個goroutine的成本極低,創建100萬個也完全可以接受。
  Go標準庫常常被稱作“語言自帶電池”,它提供瞭清晰的構件,以及用於I/O、文本處理、圖像、加解密、網絡、分布式應用的API,而且對許多標準文件格式和協議都提供瞭支持。Go的庫和工具充分地尊重慣例,減少瞭配置和解釋的需要,從而簡化瞭程序邏輯,提高瞭多種多樣的Go程序之間的相似性,使得它更容易學習和掌握。采用go工具構建的項目,僅使用文件和標識符的名字(在極少情況下使用特殊注釋),就可以推斷齣一個項目使用的所有庫、可執行文件、測試、性能基準、示例、平颱相關變體,以及文檔。Go的源代碼中就包含瞭構建的規格說明。
  全書組織我們假定你用過一兩種其他語言編過程序,可能是像C、C++或Java那樣的編譯型語言,也可能是像Python、Ruby或JavaScript那樣的解釋型語言,所以我們不會像對一個沒有任何基礎的初學者那樣事無巨細地講述所有事。錶麵上的語法大體雷同,變量、常量、錶達式、控製流和函數也一樣。
  第1章是Go的基礎結構的綜述,通過十幾個完成日常任務(包括讀寫文件、格式化文本、創建圖像,以及在Internet客戶端和服務器之間通信)的程序來介紹這門語言。
  第2章講述Go程序的組成元素—聲明、變量、新類型、包和文件,以及作用域。第3章討論數值、布爾量、字符串、常量,還解釋如何處理Unicode。第4章描述組閤類型,即使用簡單類型構造的類型,形式有數組、鍵值對、結構體,還有切片這種Go中動態錶的實現。第5章的內容是函數,另外還討論瞭錯誤處理、崩潰和恢復,以及defer語句。
  可以看齣,第1章到第5章是基礎性的,其內容是任何命令式語言都有的。Go的語法和風格可能與其他語言有所不同,但大多數程序員都能很快掌握。餘下的章節所關注的則是Go語言中與慣常做法有一定區彆的內容,包括方法、接口、並發、包、測試和反射。
  Go以一種不同尋常的方式來詮釋麵嚮對象程序設計。它沒有類繼承,甚至沒有類。較復雜的對象行為是通過較簡單的對象組閤而非繼承完成的。方法可以關聯到任何用戶自定義的類型,而不一定是結構體。具體類型和抽象類型(即接口)之間的關係是隱式的,所以一個具體類型可能會滿足該類型設計者沒有意識到其存在的接口。方法在第6章講述,接口在第7章講述。
  第8章內容是Go的並發性處理途徑,它基於CSP思想,采用goroutine和信道實現。第9章則討論並發性中較傳統的基於共享變量的一些方麵的話題。
  第10章討論包,也就是組織庫的機製。本章也說明如何高效地利用go工具,僅僅這個工具,就提供瞭編譯、測試、性能基準測定、程序格式化、文檔,以及完成許多其他任務的功能。
  第11章討論測試,在這裏Go采取瞭顯著的輕量級途徑,避免瞭重重抽象的框架,轉而使用簡單的庫和工具。測試庫提供瞭一個基礎,在其之上如有必要就可以構建更復雜的抽象瞭。
  第12章討論反射,即程序在執行期間考察自身錶示的能力。反射是一種強大的工具,不過得小心使用它,本章通過演示如何用它來實現某些重要的Go庫,解釋瞭如何找到適當的平衡。第13章解釋低階程序設計的細節,運用unsafe包來繞過Go的類型係統,以及什麼時候這樣做是閤適的。
  每章都配以一定數量的練習,你可以用來測試對Go的理解,或是探索對書中示例的擴展和變形。
  除瞭最簡單的那些以外,所有書中的示例代碼都可以從位於gopl.io的公開Git倉庫下載。每個示例由其包的導入路徑識彆,從而能夠方便地使用go get命令獲取、構建和安裝。你需要選取一個目錄作為你的Go工作空間,並將GOPATH環境變量指嚮之。在必要時,go工具會創建該目錄。例如:
  欲運行這些例子,你至少需要使用1.5版本的Go語言。
  如果你的計算機上的go工具太舊或是缺失,請按https://golang.org/doc/install的指令操作。
  更多信息來源關於Go的更多信息,最好的來源就是Go的官方網站:https://golang.org,它上麵列齣瞭文檔供讀者訪問,包括Go程序設計語言規範、標準包,諸如此類。它上麵還列齣語言綜述,指導如何撰寫Go程序,以及如何撰寫好的Go程序,還有範圍廣泛的在綫文本和視頻資源,這些都是對本書的有價值的補充。位於blog.golang.org的Go博客發錶的是關於Go的最好文章,以及該語言當下狀態、未來計劃、會議報告,還有範圍廣泛的Go相關話題的深度解讀。
  Go官網在綫訪問的一個最有用的方麵(這也是紙質書的一個令人遺憾的限製),就是它提供瞭從描述Go程序的網頁上直接運行Go程序的能力。這種功能由位於play.golang.org的Go訓練場提供,也有嵌入其他頁麵的,比如位於golang.org的首頁,或是由godoc工具提供的文檔頁麵。
  訓練場為執行簡單的實驗,撰寫短小的程序來檢驗自己對語法、語義和庫包的理解提供瞭方便,它在很多方麵取代瞭其他語言中的讀取–求值–輸齣循環(Read-Eval-Print Loop,REPL)。它的永久URL對於共享使用Go寫成的小段代碼、報告缺陷或提齣建議都是很有用的。
  在訓練場的基礎之上,位於tour.golang.org的Go綜述就是一係列的小型交互式課程,內容是Go語言的基礎思想和結構,是整門語言的有序攻略。
  訓練場和綜述的主要缺點在於它隻允許導入標準庫,還有很多庫特性(比如網絡庫)都齣於可操作性或安全原因加以限製瞭。而要編譯和運行每個程序,都要求Internet連接。所以,欲進行更詳盡的實驗,需要在本機上運行Go程序。幸運的是,下載過程相當直截瞭當,從golang.org獲取Go的分發程序並開始撰寫和運行你自己的Go程序,用不瞭幾分鍾。
  由於Go是個開源項目,你可以從https://golang.org/pkg上在綫讀取標準庫中的任何類型或函數的代碼,每個供下載的分發都同樣包含這些代碼。請使用這些代碼來弄明白某些程序的運行原理、迴答關於程序細節的問題,也可以用它們來學一學專傢是如何寫齣一流的Go代碼的。
  緻謝來自Go團隊的核心成員Rob Pike和Russ Cox仔細通讀瞭初稿數次,他們對於從詞句的斟酌到整體結構和組織的建議都極富價值。在準備本書的日語版時,柴田芳樹所做的貢獻大大超過瞭他負擔的義務,他的火眼金睛發現瞭大量英語文本中的不一緻性,以及代碼中的錯誤。我們嚮Brian Goetz、Corey Kosak、Arnold Robbins、Josh Bleecher Snyder以及Peter Weinberger對全書初稿所進行的徹底審查和批評建議深錶敬意。
  我們感激Sameer Ajmani、Ittai Balaban、David Crawshaw、Billy Donohue、Jonathan Feinberg、Andrew Gerrand、Robert Griesemer、John Linderman、Minux Ma、Bryan Mills、Bala Natarajan、Cosmos Nicolaou、Paul Staniforth、Nigel Tao以及Howard Trickey提供的諸多有用建議。 我們也感謝David Brailsford和Raph Levien的排版建議。
  我們的Addison-Wesley編輯Greg Doench最初催生瞭本書,而且一直不斷地給予幫助。Addison-Wesley的製作團隊—John Fuller、Dayna Isley、Julie Nahil、Chuti Prasertsith以及Barbara Wood—非常傑齣,作者得到瞭一流的支持。
  Alan Donovan想要感謝Google的Sameer Ajmani、Chris Demetriou、Walt Drummond以及Reid Tatge讓他有時間來寫作這本書,還有Stephen Donovan的建議和及時的鼓勵。最重要的是他的妻子Leila Kazemi,她為寫作項目提供瞭毫不猶豫的熱情和毫不動搖的支持,即使寫作造成瞭很多傢庭生活的分心和缺席。
  Brian Kernighan對他的朋友和同事深錶謝意,他們對Kernighan花費瞭很長時間纔達成對語言的理解錶示瞭耐心和理解。尤其是他的妻子Meg,她為Kernighan的寫作以及太多的其他事務提供瞭不間斷的支持。
  紐約2015年10月

《Go程序設計語言》:擁抱效率與簡潔,開啓雲原生時代的高效開發之旅 在飛速發展的技術浪潮中,軟件開發的效率、可維護性和並發處理能力已成為衡量一個項目成功與否的關鍵指標。《Go程序設計語言》正是為瞭應對這些挑戰而誕生的,它以其簡潔的語法、高效的並發模型和卓越的性能,迅速成為構建現代、可擴展係統的首選語言。這本書並非僅僅是語言特性的羅列,而是深入探討瞭Go語言的設計哲學,引導讀者理解其“簡潔即是強大”的核心理念,並將其巧妙應用於實際開發場景中。 本書旨在為開發者提供一個全麵而深入的學習路徑,從Go語言的基礎知識齣發,逐步攀升至高級主題和實際應用。它不僅適閤初學者快速掌握一門強大的新語言,也同樣能夠為經驗豐富的開發者帶來新的啓發和視角,幫助他們構建更健壯、更高效的軟件。 第一部分:Go語言的基石——簡潔之美 我們從Go語言最核心的設計原則——“簡潔”開始。Go語言的設計者們深諳“復雜性是軟件開發中的敵人”這一道理,因此,Go的語法精煉,冗餘極少,易於學習和理解。本書將帶領你逐一探索這些基礎要素: 變量、類型與值: 深入理解Go語言強類型係統的優勢,以及如何有效地聲明和使用變量。我們不僅介紹基本數據類型(整型、浮點型、布爾型、字符串),還將探討復閤類型(數組、切片、映射、結構體),並強調Go的零值概念,讓你的代碼更安全、更可預測。 控製流: `if-else`、`for`循環、`switch`語句,Go的控製流語句簡潔明瞭,沒有C語言中那些容易齣錯的陷阱。我們將學習如何利用Go的`range`關鍵字優雅地遍曆集閤,以及`defer`語句在清理資源時的強大作用,例如確保文件關閉或鎖的釋放,即使發生錯誤。 函數與作用域: 函數是Go程序的基本構建塊。本書將詳細講解函數定義、參數傳遞(值傳遞和引用傳遞)、返迴值(包括多返迴值)以及閉包的概念。理解作用域對於編寫清晰、模塊化的代碼至關重要,我們將深入探討局部變量、全局變量以及函數內聯的優化。 指針: 指針是內存地址的引用,理解指針對於高效地操作數據和理解Go的底層機製至關重要。本書將清晰地解釋指針的聲明、解引用和指針運算,並特彆強調Go中指針的安全性,避免瞭C/C++中常見的指針越界等問題。 包與導入: Go的包管理機製是其高效開發的重要保障。我們將學習如何組織代碼到不同的包中,如何導齣(public)和隱藏(private)標識符,以及如何使用`import`關鍵字導入外部包,構建清晰的項目結構。 第二部分:並發的利器——協程與通道 並發編程是現代軟件開發的另一大挑戰。Go語言以其獨創的協程(Goroutines)和通道(Channels)機製,將並發編程的復雜性降到瞭前所未有的低點。本書將用大量篇幅深入剖析這一Go語言的“殺手級特性”: 協程(Goroutines): Go的協程是輕量級的用戶態綫程,創建成本極低,可以同時運行成韆上萬個。我們將學習如何使用`go`關鍵字輕鬆啓動協程,並理解協程與操作係統綫程的區彆,從而編寫齣高性能的並發程序。 通道(Channels): 通道是協程之間通信和同步的主要方式。本書將詳盡介紹通道的創建、發送和接收操作,以及無緩衝通道和有緩衝通道的區彆和適用場景。我們將學習如何利用通道避免數據競爭,實現安全的並發數據共享。 選擇(Select): `select`語句是Go處理多個通道操作的強大工具,它允許協程同時等待多個通信操作,並選擇其中一個就緒的操作進行執行。我們將學習`select`的用法,以及如何使用`default`子句實現非阻塞的通道操作。 同步原語: 除瞭通道,Go的標準庫還提供瞭`sync`包,包含瞭常用的同步原語,如互斥鎖(`sync.Mutex`)、讀寫鎖(`sync.RWMutex`)和等待組(`sync.WaitGroup`)。本書將講解這些原語的使用場景和最佳實踐,幫助開發者在特定情況下實現更精細化的並發控製。 並發模式: 我們將深入探討一些經典的並發設計模式,例如生産者-消費者模式、工作池模式、流水綫模式等,並展示如何使用Go的並發原語來實現它們。理解這些模式將極大地提升你構建高並發係統的能力。 第三部分:實戰與進階——構建可靠的Go應用 理論知識的掌握需要結閤實際應用纔能轉化為真正的能力。本書將引導讀者將所學知識付諸實踐,並探索Go語言在構建實際應用中的強大威力: 錯誤處理: Go語言獨特的錯誤處理機製——將錯誤作為返迴值,鼓勵開發者顯式地處理錯誤。本書將詳細講解`error`接口的用法,以及如何通過`if err != nil`模式編寫健壯的代碼。我們將探討錯誤包裝、自定義錯誤類型等高級錯誤處理技術。 接口與多態: Go的接口是一種強大的抽象機製,它定義瞭一組方法簽名,而無需關心具體的實現類型。本書將深入講解接口的定義、實現以及接口組閤,幫助你編寫高度解耦、易於擴展的代碼。理解接口是掌握Go語言多態性的關鍵。 結構體與方法: 結構體是組閤不同類型數據的有效方式。我們將學習如何定義結構體,以及如何為結構體關聯方法,從而實現麵嚮對象的編程範式(盡管Go並非純粹的麵嚮對象語言)。 反射(Reflection): 反射允許程序在運行時檢查和修改其自身的結構。本書將介紹`reflect`包的基本用法,以及它在序列化、反序列化和元編程中的應用。同時,我們也會強調過度使用反射可能帶來的性能和可讀性問題。 測試與性能優化: 編寫測試是保證軟件質量的重要環節。我們將學習Go的`testing`包,如何編寫單元測試、基準測試,以及如何利用Go的工具進行性能分析和優化。 網絡編程: Go語言在網絡編程方麵擁有天然的優勢。本書將講解`net/http`包,如何構建Web服務器、客戶端,以及如何使用`net`包進行TCP/UDP通信。 標準庫的寶藏: Go語言擁有一個極其豐富和強大的標準庫。本書將介紹一些常用的標準庫包,例如`fmt`(格式化輸入輸齣)、`io`(輸入輸齣)、`os`(操作係統接口)、`strings`(字符串操作)、`time`(時間處理)等,並展示它們在實際開發中的應用。 構建工具與項目管理: 掌握Go的構建工具`go build`、`go run`、`go get`以及模塊化管理`go modules`是高效開發的基礎。本書將為你介紹這些工具,幫助你更好地管理和構建你的Go項目。 實戰案例解析: 為瞭讓讀者更好地理解Go語言的強大之處,本書將穿插多個精心設計的實戰案例,涵蓋從簡單的命令行工具到復雜的Web服務,讓你在實踐中鞏固所學,體驗Go語言的魅力。 《Go程序設計語言》 不僅僅是一本技術書籍,它更是一份邀請,邀請你加入到Go語言的開發社區,體驗一種更高效、更簡潔、更富有活力的編程方式。無論你是初入編程的菜鳥,還是經驗豐富的架構師,這本書都將為你打開一扇通往現代化軟件開發新世界的大門,讓你在雲原生時代遊刃有餘,構建齣卓越的軟件産品。

用戶評價

評分

我一直對探索不同編程語言的獨特之處和設計哲學非常著迷。《The Go Programming Language》這本書,雖然我還沒有親身翻閱,但它在我心中已經勾勒齣瞭一個清晰的輪廓:一本能夠深刻解析 Go 語言精髓的著作。我非常期待它能以一種引人入勝的方式,帶領讀者走進 Go 的世界,去感受其簡潔、高效的設計理念。如果書中能夠深入剖析 Go 語言在構建現代化、分布式係統方麵的獨特優勢,並提供一些具有啓發性的設計模式和最佳實踐,那將對我非常有價值。我希望這本書能夠激發我進一步探索 Go 語言的潛能,並能夠將其應用於我未來所從事的各類技術項目中。

評分

我是一名初入編程領域的學生,正在尋找一門既有深度又有廣度的語言來打下堅實的基礎。《The Go Programming Language》這本書,即使我還沒有實際閱讀,光是“Go程序設計語言”這個名字就讓我覺得它涵蓋瞭從基礎語法到高級特性的方方麵麵。我希望這本書能夠循序漸進,從最基礎的變量、數據類型講起,然後逐步過渡到函數、接口、並發模型等更復雜的概念。我尤其看重的是,它是否能提供清晰的代碼示例,幫助我理解抽象的理論知識,並鼓勵我去動手實踐,通過大量的練習來鞏固所學,為我未來的編程生涯打下堅實的基礎。

評分

作為一個對軟件架構和係統設計充滿熱情的人,我一直在尋找能夠深入理解現代編程語言設計理念的優秀讀物。《The Go Programming Language》這本書,盡管我尚未翻閱,但從其在技術社區的討論熱度以及作者的聲望來看,它很有可能提供瞭對 Go 語言設計哲學和底層原理的深刻洞察。我非常期待書中能夠詳細闡述 Go 語言是如何在簡潔性、性能和並發性之間取得平衡的,以及它在構建可伸縮、高可用係統方麵的優勢。如果書中能夠提供一些實際案例分析,展示 Go 如何被應用於大型項目,那將是錦上添工,讓我能更直觀地感受到 Go 的實用價值。

評分

我一直對 Go 語言在並發和網絡編程方麵的強大能力感到好奇,也聽說過《The Go Programming Language》(中文譯名《Go程序設計語言》)這本書在業界有著極高的聲譽。雖然我目前還沒有開始深入閱讀這本書,但從我有限的瞭解和網絡上的口碑來看,這本書似乎為我開啓瞭一扇通往 Go 世界的大門。我特彆期待書中能夠深入淺齣地講解 Go 的核心概念,比如 Goroutines 和 Channels,這些是 Go 語言區彆於其他語言的關鍵特性。我希望通過這本書,我能真正理解如何在 Go 中編寫高效、可維護的並發程序,並能運用這些知識來解決實際開發中遇到的難題。

評分

對於許多經驗豐富的開發者來說,掌握一門新的強大語言是不斷提升自身競爭力的重要途徑。而《The Go Programming Language》這本書,在我看來,很可能就是這樣一本能夠幫助我們拓展技術視野、提升編程技能的寶藏。我期望書中不僅僅是羅列 Go 的語法和特性,更重要的是能夠提供一種“Goic”的編程思維方式,教會我們如何以 Go 的方式去思考和解決問題。如果書中能深入探討 Go 語言在錯誤處理、內存管理、性能優化等方麵的最佳實踐,並結閤實際項目經驗進行講解,那將對我幫助巨大,讓我能夠更快地將 Go 語言融入到我的實際工作中。

評分

入門書,雖然很簡潔但是也是麵麵俱到,作為工具書隨時查詢,雖然有電子版,但是實體書手感贊.

評分

機械工業齣版社??゛愛你

評分

很好,有的看瞭,屯瞭很多書

評分

我為什麼喜歡在京東買東西,因為今天買明天就可以送到,而且價格也比超市便宜。我為什麼每個商品的評價都一樣,因為在京東買的東西太多太多瞭,導緻積纍瞭很多未評價的訂單,所以我統一用段話作為評價內容。京東購物這麼久,買到的東西都很好,如果不滿意的就會選擇退貨,而且京東的退換貨服務也很好。所以看到這個評論就證明我沒退貨,對商品比較滿意啦。

評分

紙質不錯,原版書

評分

非常,非常,非常,非常,非常,好

評分

京東物流非常棒,商品質優價廉。

評分

網上有中文翻譯版的在github上,屯一本英文版隨時對照著看。

評分

好書,。。。。。。。。。。英文的慢慢看,。。。。哈哈哈哈哈哈。。。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.teaonline.club All Rights Reserved. 圖書大百科 版權所有