【有庫存】NT售價: 495 元
經過十多年的發展,Go語言日漸完善,它是一門開源的且支持跨平臺的編程語言。與C、C++語言類似,Go語言也屬于強類型語言,源代碼需要編譯后才能運行,因此擁有較優的性能。從小工具到Web服務器的開發,Go語言都能勝任。Go語言有以下特點: (1) 代碼以包(Package)為單元,同一層目錄下只能定義一個包名。(2) 一個可執行程序有且只能有一個命名為main的包,main包中必須存在main函數。當程序運行時,會查找main函數,并從該函數開始執行; 當main函數執行完畢(或跳出該函數)后,可執行程序退出。(3) 代碼語句可以以“;”結尾,也可以省略。(4) 左大括號(“{”)不能另起一行輸入,必須與前面的內容同處一行。例如:func test() {……}(5) if、for等關鍵字之后不需要小括號(C、C++等語言需要小括號)。(6) 字符串常量可以使用“`”來避免轉義,例如:`some content`(7) 在函數(或方法)的調用語句中使用go關鍵字可以輕松完成異步編程。例如:go test()本書內容涵蓋了Go語言的各個知識點。從語法基礎、數據類型到較為復雜的反射技術、網絡編程,均有闡述。每個知識點都配有豐富的代碼示例,方便理解; 每一章的末尾附帶思考題,可幫助讀者回憶所學內容,加深印象。編者希望通過本書幫助初學者快速了解Go語言,掌握最基本的編程方法和技術要點。閱讀本書后,讀者應該能夠運用Go語言編寫出一些像樣的程序。由于編者水平有限,書中難免出現不完善的地方,歡迎廣大讀者及同仁不吝賜教,共同進步。編者2020年6月
Go(Golang)語言在語法上與C、C++ 語言相似,是一門開源的編程語言,可用于編寫簡單的、實用的應用程序。Go語言支持內存管理和垃圾回收(GC)機制,使用Go協程可以輕松實現并發計算。本書通過通俗易懂的文字,著重講解Go語言編程的基礎知識,同時配有豐富的示例。本書主要內容包括: 開發環境配置及語法基礎,代碼包(Package),內置運算符與數據類型,代碼流程控制,函數式、接口與結構體,數組、切片與映射類型,反射技術,管理命令行參數,I/O、數據壓縮及文件操作,加密與解密,網絡編程,Go協程。作為入門教程,本書適合對編程感興趣并且希望通過自學來掌握Go語言基礎知識的讀者使用,或者有其他編程語言基礎的讀者閱讀參考。同時,本書也可作為高等院校計算機及相關專業的教材。
第1章準備工作1.1安裝Go語言編譯器1.2配置環境變量1.3驗證Go語言編譯器的工作狀態第2章語法基礎2.1代碼結構2.2main包與main函數2.3Go語句2.4代碼塊2.5注釋2.6使用Go語言編譯器第3章運算符3.1操作數3.2算術運算符3.2.1四則運算符3.2.2取余運算符3.2.3如何實現指數運算3.2.4自增與自減運算符3.3比較運算符3.4邏輯運算符3.5位運算符3.5.1按位與3.5.2按位或3.5.3取反3.5.4位移3.5.5按位異或3.5.6清除標志位3.6成員運算符3.7取地址運算符3.8復合運算符3.9運算符的優先級第4章程序包管理4.1package語句4.2程序包的目錄結構4.3導入語句4.4初始化函數4.5模塊4.5.1go.mod文件的基本結構4.5.2創建go.mod文件4.5.3編輯go.mod文件4.5.4使用本地模塊4.6成員的可訪問性第5章變量與常量5.1變量的初始化5.2組合賦值5.3匿名變量5.4常量5.5批量聲明5.6變量的作用域5.7變量的默認值第6章基礎類型6.1字符與字符串6.1.1rune類型6.1.2string類型6.2數值類型6.2.1示例:獲取數值類型占用的內存大小6.2.2整數常量的表示方式6.2.3科學記數法6.2.4復數6.3日期與時間6.3.1Month類型6.3.2Weekday類型6.3.3Duration類型6.3.4Time類型6.3.5Sleep函數6.3.6Timer類型6.4指針6.4.1何時使用指針類型6.4.2new函數6.5iota常量第7章函數7.1函數的定義7.2調用函數7.3return語句7.4多個返回值7.5可變個數的參數7.6匿名函數7.7將函數作為參數傳遞第8章流程控制8.1順序執行8.2if語句8.3switch語句8.3.1基于表達式構建的switch語句8.3.2基于類型構建的switch語句8.3.3fallthrough語句8.4for語句8.4.1僅帶條件子句的for語句8.4.2帶三個子句的for語句8.4.3枚舉集合元素語句8.4.4continue與break語句8.5代碼跳轉8.5.1代碼標簽與goto語句8.5.2break、continue語句與代碼跳轉第9章接口與結構體9.1自定義類型9.2結構體9.2.1結構體的定義9.2.2結構體的實例化9.2.3方法9.3接口9.3.1接口的定義9.3.2接口的實現9.3.3空接口——interface{}9.3.4接口與函數9.4類型嵌套9.5類型斷言第10章數組與切片10.1數組10.1.1數組的初始化10.1.2訪問數組元素10.1.3*〔n〕T與〔n〕*T的區別10.1.4多維數組10.2切片10.2.1創建切片實例10.2.2添加和刪除元素第11章映射與鏈表11.1映射11.1.1映射對象的初始化11.1.2訪問映射對象的元素11.1.3檢查key的存在性11.2雙向鏈表11.2.1與雙向鏈表有關的API11.2.2創建鏈表實例11.2.3添加和刪除元素11.2.4移動元素11.2.5枚舉鏈表元素11.3環形鏈表11.3.1與環形鏈表有關的API11.3.2使用環形鏈表11.3.3滾動環形鏈表11.3.4鏈接兩個環形鏈表第12章反射12.1關鍵API12.2獲取類型信息12.2.1類型分辨12.2.2枚舉結構體類型的方法列表12.2.3枚舉結構體類型的字段列表12.2.4查找嵌套結構體的字段成員12.2.5獲取函數的參數信息12.2.6獲取通道類型的信息12.2.7判斷類型是否實現了某個接口12.3Value與對象的值12.3.1修改對象的值12.3.2讀寫結構體實例的字段12.3.3更新數組/切片的元素12.3.4調用函數12.3.5調用方法12.3.6讀寫映射類型的元素12.4動態構建類型12.4.1New函數12.4.2創建數組類型12.4.3創建結構體類型12.4.4動態創建和調用函數12.4.5生成通用函數體12.5結構體的Tag第13章字符串處理13.1打印文本13.2格式化輸出13.2.1格式化整數值13.2.2格式化浮點數值13.2.3格式化字符串13.2.4格式化布爾類型的值13.2.5%T與%v格式控制符13.2.6輸出包含前綴的整數值13.2.7設置輸出內容的寬度13.2.8控制浮點數的精度13.2.9參數索引13.2.10通過參數來控制文本的寬度和精度13.3讀取輸入文本13.3.1讀取鍵盤輸入的內容13.3.2從文件中讀入文本13.3.3以特定的格式讀取文本13.4實現Stringer接口13.5連接字符串13.6替換字符串13.7拆分字符串13.8查找子字符串13.8.1查找前綴與后綴13.8.2查找子字符串的位置13.9修剪字符串13.9.1去除前綴和后綴13.9.2去除字符串首尾的空格13.9.3修剪指定的字符13.10重復字符串13.11字符串與數值之間的轉換13.12切換大小寫13.13使用Builder構建字符串第14章常用數學函數14.1求絕對值14.2最大值與最小值14.3三角函數與反三角函數14.4冪運算14.5開平方/立方根14.6大型數值14.6.1大型整數值之間的運算14.6.2階乘運算14.6.3使用大型浮點數值14.7隨機數14.7.1生成隨機浮點數14.7.2生成隨機整數14.7.3設置隨機數種子14.7.4生成隨機全排列14.7.5“洗牌”程序14.7.6生成隨機字節序列第15章排序15.1基本排序函數15.2實現遞減排序15.3按字符串的長度排序15.4Interface接口第16章輸入與輸出16.1簡單的內存緩沖區16.2與輸入/輸出有關的接口類型16.2.1實現讀寫功能16.2.2嵌套封裝16.3Buffer類型16.4Copy函數16.5MultiReader函數和MultiWriter函數16.6SectionReader第17章文件與目錄17.1文件操作17.1.1Create函數與Open函數17.1.2重命名文件17.1.3獲取文件信息17.1.4OpenFile函數17.2創建和刪除目錄17.3硬鏈接與符號鏈接17.3.1硬鏈接17.3.2符號鏈接17.4WriteFile函數與ReadFile函數17.5臨時文件17.6更改程序的工作目錄第18章加密與解密18.1Base64的編碼與解碼18.1.1內置Base64編碼方案18.1.2基于流的編碼與解碼18.1.3自定義字符映射表18.2DES與AES算法18.2.1Block接口18.2.2BlockMode模式18.2.3基于流的加密與解密18.3哈希算法18.3.1hash.Hash接口18.3.2使用crypto子包中的哈希API18.3.3HMAC算法18.4RSA算法18.4.1生成密鑰18.4.2加密和解密18.4.3存儲密鑰18.5PEM編碼18.5.1編碼與解碼18.5.2解碼后的保留數據18.5.3消息頭第19章命令行參數19.1os.Args變量19.2命令行參數分析API——flag包19.2.1命令行參數與變量的綁定19.2.2Value接口第20章數據壓縮20.1標準庫對壓縮算法的支持20.2Gzip壓縮算法20.2.1Gzip基本用法20.2.2壓縮多個文件20.2.3解壓多個文件20.3DEFLATE算法20.4自定義的索引字典20.5Zip文檔20.5.1從Zip文檔中讀取文件20.5.2在內存中讀寫Zip文檔20.5.3注冊壓縮算法20.6Tar文檔第21章協程21.1啟動Go協程21.2通道21.2.1實例化通道21.2.2數據緩沖21.2.3單向通道21.2.4通道與select語句21.3互斥鎖21.4WaitGroup類型第22章網絡編程22.1枚舉本地計算機上的網絡接口22.2Socket通信22.2.1TCP示例:文件傳輸22.2.2UDP示例:文本傳輸22.3HTTP客戶端22.3.1發送GET與POST請求22.3.2發送自定義HTTP頭22.4HTTP服務器22.4.1創建HTTP服務器22.4.2實現Handler接口22.4.3ServeMux類型22.4.4封裝函數22.4.5讀取URL參數22.4.6獲取客戶端提交的表單數據22.4.7讀取客戶端上傳的文件22.5CGI編程22.5.1準備工作22.5.2示例:一個簡單的CGI程序22.5.3使用cgi包22.5.4在子進程中獲取Request對象附錄A常用API與程序包對照表附錄BGo語言代碼編輯工具使用說明