舉報

會員
Go語言高級編程(第2版)
最新章節:
后記
本書從實踐出發,全面講解Go語言的高級編程技術和應用場景,涵蓋Go語言的底層機制、性能優化、系統編程及前沿應用等多個方面。全書共10章,第1章回顧Go語言的發展歷程,幫助讀者理解其設計理念和演進過程;第2章和第3章系統介紹CGO編程與Go匯編語言的使用方法,使讀者能夠高效調用C庫并深入理解Go的底層實現:第4章和第5章深入解析Go運行時和編譯器,包括內存管理、調度器、垃圾收集機制等相關技術;第6章和第7章探討Go在RPC和Web編程中的應用,介紹Protobuf、gRPC等核心技術,并剖析Web框架的設計和優化方案;第8章和第9章拓展Go的應用邊界,涵蓋WebAssembly和GUI編程,使Go語言不僅限于服務器端編程;第10章新增Go語言與大模型的結合,探索人工智能技術在Go生態系統中的應用場景。本書適合對Go語言有一定基礎,希望深入理解其底層機制和高級應用的開發者閱讀。無論是系統工程師、后端開發者,還是對Go語言運行時、編譯器及新興技術感興趣的Go程序員,都能在本書中找到翔實的技術解析和實踐指南,達到高效開發和技術進階的目的。
- 后記 更新時間:2025-08-07 17:58:00
- 10.6 補充說明
- 10.5.4 小結
- 10.5.3 應用到聊天服務中
- 10.5.2 集成到大模型流程中
- 10.5.1 計算常量表達式
- 10.5 大模型智能體
- 10.4.5 小結
- 10.4.4 本地大模型驅動聊天應用
- 10.4.3 運行大模型
- 10.4.2 下載大模型
- 10.4.1 安裝Ollama
- 10.4 Ollama
- 10.3.4 小結
- 10.3.3 構建大模型聊天應用
- 10.3.2 連接DeepSeek
- 10.3.1 連接OpenAI的大模型
- 10.3 LangChain for Go
- 10.2.7 小結
- 10.2.6 交互式對話
- 10.2.5 推理模型
- 10.2.4 多輪對話補全
- 10.2.3 Go語言驗證服務
- 10.2.2 Go語言SDK
- 10.2.1 生成API key
- 10.2 DeepSeek
- 10.1.3 小結
- 10.1.2 如何接入大語言模型
- 10.1.1 Gaby框架
- 10.1 AI機器人gabyhelp
- 第10章 大模型
- 9.5 補充說明
- 9.4.6 為何如此煩瑣
- 9.4.5 本地的語言環境
- 9.4.4 制作翻譯文件
- 9.4.3 你好,世界!多語言版
- 9.4.2 國際化實現原理
- 9.4.1 你好,世界!
- 9.4 國際化支持
- 9.3.7 Walk的工作原理
- 9.3.6 添加版本信息
- 9.3.5 給可執行程序添加圖標
- 9.3.4 內置.manifest文件
- 9.3.3 通過.manifest文件指定依賴
- 9.3.2 聲明式語法
- 9.3.1 你好 Walk
- 9.3 Walk框架入門
- 9.2.8 Fyne在瀏覽器中
- 9.2.7 布局管理
- 9.2.6 畫布
- 9.2.5 對話框
- 9.2.4 回調函數
- 9.2.3 Hello Fyne
- 9.2.2 安裝Fyne核心庫
- 9.2.1 安裝環境
- 9.2 Fyne框架入門
- 9.1.4 底層驅動程序
- 9.1.3 核心組件
- 9.1.2 顯示圖像
- 9.1.1 Hello Shiny
- 9.1 Shiny框架入門
- 第9章 Go GUI編程
- 8.7 補充說明
- 8.6.3 運行時限制
- 8.6.2 執行WebAssembly模塊
- 8.6.1 構建WebAssembly模塊
- 8.6 導出Go語言函數
- 8.5.4 小結
- 8.5.3 處理HTTP請求示例
- 8.5.2 認識Proxy-Wasm規范
- 8.5.1 MOSN的WebAssembly插件架構設計
- 8.5 示例:WebAssembly插件
- 8.4.3 小結
- 8.4.2 通過虛擬機執行
- 8.4.1 構建WebAssembly模塊
- 8.4 WebAssembly虛擬機
- 8.3.5 WASI規范
- 8.3.4 WebAssembly模塊的導入函數
- 8.3.3 syscall/js包
- 8.3.2 回調Go語言函數
- 8.3.1 使用JavaScript函數
- 8.3 外部函數接口
- 8.2.4 小結
- 8.2.3 在瀏覽器中執行WebAssembly模塊
- 8.2.2 在Node.js中執行WebAssembly模塊
- 8.2.1 用Go語言生成并執行WebAssembly模塊
- 8.2 你好,WebAssembly
- 8.1.2 終將被編譯為WebAssembly
- 8.1.1 誕生背景
- 8.1 WebAssembly簡介
- 第8章 Go和WebAssembly
- 7.11 補充說明
- 7.10.4 小結
- 7.10.3 go-zero
- 7.10.2 Kratos
- 7.10.1 Go Micro
- 7.10 現代Go語言后端編程
- 7.9.3 如何實現灰度發布規則
- 7.9.2 通過業務規則進行灰度發布
- 7.9.1 通過分批次部署實現灰度發布
- 7.9 灰度發布
- 7.8.5 表驅動開發
- 7.8.4 接口的優缺點
- 7.8.3 使用接口進行抽象
- 7.8.2 使用函數封裝業務流程
- 7.8.1 業務系統的發展過程
- 7.8 接口和表驅動開發
- 7.7 大型Web項目的分層
- 7.6.3 服務瓶頸和QoS
- 7.6.2 令牌桶算法原理
- 7.6.1 流量限制算法——令牌桶算法
- 7.6 服務流量限制
- 7.5.4 基于SQLC的數據層開發
- 7.5.3 隱式SQL導致線上故障
- 7.5.2 提高生產效率的ORM和SQL構建器
- 7.5.1 從database/sql講起
- 7.5 與數據庫交互
- 7.4.3 請求驗證器原理
- 7.4.2 用請求驗證器減少重復勞動
- 7.4.1 重構請求驗證函數
- 7.4 請求驗證
- 7.3.4 在中間件中適合做哪些事情
- 7.3.3 更優雅的中間件寫法
- 7.3.2 使用中間件剝離非業務邏輯
- 7.3.1 代碼泥潭
- 7.3 中間件
- 7.2.3 壓縮檢索樹創建過程
- 7.2.2 HttpRouter原理
- 7.2.1 HttpRouter簡介
- 7.2 請求路由
- 7.1 Go Web編程簡介
- 第7章 Go Web編程
- 6.8 補充說明
- 6.7.4 啟動REST服務
- 6.7.3 生成REST風格的接口的代碼
- 6.7.2 插件中讀取擴展信息
- 6.7.1 Protobuf擴展語法
- 6.7 基于Protobuf的框架pbgo
- 6.6.3 Nginx
- 6.6.2 REST風格的接口
- 6.6.1 驗證器
- 6.6 gRPC和Protobuf擴展
- 6.5.4 與Web服務共存
- 6.5.3 截取器
- 6.5.2 令牌認證
- 6.5.1 證書認證
- 6.5 gRPC進階
- 6.4.4 發布/訂閱模式
- 6.4.3 gRPC流
- 6.4.2 gRPC簡介
- 6.4.1 gRPC技術棧
- 6.4 gRPC入門
- 6.3.4 上下文信息
- 6.3.3 反向RPC
- 6.3.2 基于RPC實現監視功能
- 6.3.1 客戶端RPC的實現原理
- 6.3 玩轉RPC
- 6.2.3 自動生成完整的RPC代碼
- 6.2.2 定制代碼生成插件
- 6.2.1 Protobuf入門
- 6.2 Protobuf
- 6.1.4 HTTP上的RPC
- 6.1.3 跨語言的RPC
- 6.1.2 更安全的RPC接口
- 6.1.1 RPC版“Hello World”
- 6.1 RPC入門
- 第6章 RPC和Protobuf
- 5.7 補充說明
- 5.6.4 go vet自動識別這類問題
- 5.6.3 統計真實代碼發現問題
- 5.6.2 Go語言社區的不同觀點
- 5.6.1 append()函數的參數陷阱
- 5.6 示例:檢查append參數
- 5.5.4 小結
- 5.5.3 表達式自動轉換到LLVM IR程序
- 5.5.2 表達式手動轉換到LLVM IR程序
- 5.5.1 最小編譯器
- 5.5 LLVM后端
- 5.4.5 小結
- 5.4.4 SSA包的架構
- 5.4.3 SSA解釋運行
- 5.4.2 生成SSA
- 5.4.1 SSA簡介
- 5.4 SSA 中間代碼
- 5.3.3 小結
- 5.3.2 整體架構
- 5.3.1 名字空間
- 5.3 語義分析
- 5.2.4 小結
- 5.2.3 跨包的類型檢查
- 5.2.2 go/types包
- 5.2.1 語義錯誤
- 5.2 類型檢查
- 5.1.4 標識符:為表達式中引入變量
- 5.1.3 求值表達式
- 5.1.2 表達式的語法分析
- 5.1.1 基礎表達式語法
- 5.1 表達式
- 第5章 Go編譯器
- 4.7 補充說明
- 4.6.8 小結
- 4.6.7 堆內存性能分析
- 4.6.6 持續性能分析
- 4.6.5 性能分析引導的優化
- 4.6.4 在程序中增加性能分析
- 4.6.3 內存分配性能測試分析
- 4.6.2 CPU性能測試分析
- 4.6.1 安裝依賴的Graphviz工具
- 4.6 運行時性能分析
- 4.5.6 小結
- 4.5.5 網絡輪詢器的缺陷
- 4.5.4 goroutine的掛起和喚醒流程
- 4.5.3 阻塞易理解,回調難理解
- 4.5.2 Go對操作系統的網絡API的封裝
- 4.5.1 傳統網絡編程
- 4.5 網絡輪詢器
- 4.4.5 小結
- 4.4.4 一些常見的優化思路
- 4.4.3 與Java分代機制的對比
- 4.4.2 并發標記清掃的核心流程
- 4.4.1 語法垃圾和語義垃圾
- 4.4 垃圾收集器
- 4.3.5 小結
- 4.3.4 理解Go的內存占用
- 4.3.3 內存分配器簡介
- 4.3.2 操作系統內存管理的二次抽象
- 4.3.1 逃逸分析
- 4.3 內存分配器
- 4.2.6 小結
- 4.2.5 理解調度和延遲的關系
- 4.2.4 處理阻塞
- 4.2.3 任務隊列細節
- 4.2.2 消費者細節
- 4.2.1 生產者細節
- 4.2 調度器
- 4.1.5 小結
- 4.1.4 網絡輪詢器
- 4.1.3 垃圾收集器
- 4.1.2 內存分配器
- 4.1.1 調度器
- 4.1 運行時概覽
- 第4章 Go運行時
- 3.8 補充說明
- 3.7.3 AVX指令集
- 3.7.2 直接調用C語言函數
- 3.7.1 系統調用
- 3.7 匯編語言的威力
- 3.6.6 調用約定
- 3.6.5 閉包函數
- 3.6.4 遞歸函數:1到n求和
- 3.6.3 PCDATA和FUNCDATA
- 3.6.2 高級匯編語言
- 3.6.1 函數調用規范
- 3.6 再論函數
- 3.5.3 for循環
- 3.5.2 if/goto跳轉
- 3.5.1 順序執行
- 3.5 控制流
- 3.4.6 宏函數
- 3.4.5 調用其他函數
- 3.4.4 函數中的局部變量
- 3.4.3 參數和返回值的內存布局
- 3.4.2 函數參數和返回值
- 3.4.1 基本語法
- 3.4 函數
- 3.3.4 標識符規則和特殊標志
- 3.3.3 變量的內存布局
- 3.3.2 全局變量
- 3.3.1 常量
- 3.3 常量和全局變量
- 3.2.6 ARM64指令集
- 3.2.5 x86-64指令集
- 3.2.4 Go匯編中的偽寄存器
- 3.2.3 x86-64體系結構
- 3.2.2 《人力資源機器》游戲
- 3.2.1 圖靈機和Brainfuck語言
- 3.2 計算機體系結構
- 3.1.6 沒有分號
- 3.1.5 特殊字符
- 3.1.4 定義main()函數
- 3.1.3 定義字符串類型變量
- 3.1.2 定義整型變量
- 3.1.1 實現和聲明
- 3.1 快速入門
- 第3章 Go匯編語言
- 2.8 補充說明
- 2.7 MOSN帶來的優化
- 2.6.3 徹底解放C++的this指針
- 2.6.2 Go語言對象到C++類
- 2.6.1 C++類到Go語言對象
- 2.6 C++類封裝
- 2.5.5 runtime.Pinner類型
- 2.5.4 導出C語言函數不能返回Go內存
- 2.5.3 C長期持有Go指針對象
- 2.5.2 C臨時訪問傳入的Go內存
- 2.5.1 Go訪問C內存
- 2.5 內存模型
- 2.4.4 C調用Go導出函數
- 2.4.3 void函數的返回值
- 2.4.2 C語言函數的返回值
- 2.4.1 Go調用C語言函數
- 2.4 函數調用
- 2.3.7 切片間的轉換
- 2.3.6 數值和指針的轉換
- 2.3.5 指針間的轉換
- 2.3.4 數組、字符串和切片的轉換
- 2.3.3 結構體、聯合和枚舉類型的轉換
- 2.3.2 Go字符串和切片的轉換
- 2.3.1 數值類型的轉換
- 2.3 類型轉換
- 2.2.3 build標志條件編譯
- 2.2.2 #cgo命令
- 2.2.1 import "C"語句
- 2.2 CGO基礎
- 2.1.6 面向C語言接口的Go編程
- 2.1.5 用Go重新實現C語言函數
- 2.1.4 C代碼的模塊化
- 2.1.3 使用自己的C語言函數
- 2.1.2 基于C標準庫函數輸出字符串
- 2.1.1 最簡CGO程序
- 2.1 快速入門
- 第2章 CGO編程
- 1.8 補充說明
- 1.7.4 loopvar語義調整
- 1.7.3 迭代器的原理
- 1.7.2 迭代器的定義
- 1.7.1 使用迭代器
- 1.7 自定義迭代器
- 1.6.6 Go語言的泛型為何用方括號
- 1.6.5 方法不支持泛型的原因
- 1.6.4 泛型后方法淪為“二等公民”
- 1.6.3 運行時Cloner[T]和T類型的區別
- 1.6.2 泛型和接口
- 1.6.1 認識Go語言的泛型
- 1.6 泛型編程
- 1.5.7 不靠譜的同步
- 1.5.6 基于通道的通信
- 1.5.5 goroutine的創建
- 1.5.4 初始化順序
- 1.5.3 順序一致性內存模型
- 1.5.2 原子操作
- 1.5.1 goroutine和系統線程
- 1.5 面向并發的內存模型
- 1.4.3 接口
- 1.4.2 方法
- 1.4.1 函數
- 1.4 函數、方法和接口
- 1.3.3 切片
- 1.3.2 字符串
- 1.3.1 數組
- 1.3 數組、字符串和切片
- 1.2.7 你好 世界!——2.0版本
- 1.2.6 Go語言——2007—2009
- 1.2.5 Limbo——Sean Dorward Phil Winterbottom Rob Pike,1995
- 1.2.4 Alef——Phil Winterbottom,1993
- 1.2.3 Newsqueak——Rob Pike,1989
- 1.2.2 C語言——Dennis Ritchie,1972—1989
- 1.2.1 B語言——Ken Thompson,1969
- 1.2 “Hello World”的革命
- 1.1.2 你好,世界
- 1.1.1 來自貝爾實驗室特有基因
- 1.1 Go語言創世紀
- 第1章 Go語言基礎
- 致謝
- 前言
- 序二
- 序一
- 內容提要
- 版權
- 版權信息
- 封面
- 封面
- 版權信息
- 版權
- 內容提要
- 序一
- 序二
- 前言
- 致謝
- 第1章 Go語言基礎
- 1.1 Go語言創世紀
- 1.1.1 來自貝爾實驗室特有基因
- 1.1.2 你好,世界
- 1.2 “Hello World”的革命
- 1.2.1 B語言——Ken Thompson,1969
- 1.2.2 C語言——Dennis Ritchie,1972—1989
- 1.2.3 Newsqueak——Rob Pike,1989
- 1.2.4 Alef——Phil Winterbottom,1993
- 1.2.5 Limbo——Sean Dorward Phil Winterbottom Rob Pike,1995
- 1.2.6 Go語言——2007—2009
- 1.2.7 你好 世界!——2.0版本
- 1.3 數組、字符串和切片
- 1.3.1 數組
- 1.3.2 字符串
- 1.3.3 切片
- 1.4 函數、方法和接口
- 1.4.1 函數
- 1.4.2 方法
- 1.4.3 接口
- 1.5 面向并發的內存模型
- 1.5.1 goroutine和系統線程
- 1.5.2 原子操作
- 1.5.3 順序一致性內存模型
- 1.5.4 初始化順序
- 1.5.5 goroutine的創建
- 1.5.6 基于通道的通信
- 1.5.7 不靠譜的同步
- 1.6 泛型編程
- 1.6.1 認識Go語言的泛型
- 1.6.2 泛型和接口
- 1.6.3 運行時Cloner[T]和T類型的區別
- 1.6.4 泛型后方法淪為“二等公民”
- 1.6.5 方法不支持泛型的原因
- 1.6.6 Go語言的泛型為何用方括號
- 1.7 自定義迭代器
- 1.7.1 使用迭代器
- 1.7.2 迭代器的定義
- 1.7.3 迭代器的原理
- 1.7.4 loopvar語義調整
- 1.8 補充說明
- 第2章 CGO編程
- 2.1 快速入門
- 2.1.1 最簡CGO程序
- 2.1.2 基于C標準庫函數輸出字符串
- 2.1.3 使用自己的C語言函數
- 2.1.4 C代碼的模塊化
- 2.1.5 用Go重新實現C語言函數
- 2.1.6 面向C語言接口的Go編程
- 2.2 CGO基礎
- 2.2.1 import "C"語句
- 2.2.2 #cgo命令
- 2.2.3 build標志條件編譯
- 2.3 類型轉換
- 2.3.1 數值類型的轉換
- 2.3.2 Go字符串和切片的轉換
- 2.3.3 結構體、聯合和枚舉類型的轉換
- 2.3.4 數組、字符串和切片的轉換
- 2.3.5 指針間的轉換
- 2.3.6 數值和指針的轉換
- 2.3.7 切片間的轉換
- 2.4 函數調用
- 2.4.1 Go調用C語言函數
- 2.4.2 C語言函數的返回值
- 2.4.3 void函數的返回值
- 2.4.4 C調用Go導出函數
- 2.5 內存模型
- 2.5.1 Go訪問C內存
- 2.5.2 C臨時訪問傳入的Go內存
- 2.5.3 C長期持有Go指針對象
- 2.5.4 導出C語言函數不能返回Go內存
- 2.5.5 runtime.Pinner類型
- 2.6 C++類封裝
- 2.6.1 C++類到Go語言對象
- 2.6.2 Go語言對象到C++類
- 2.6.3 徹底解放C++的this指針
- 2.7 MOSN帶來的優化
- 2.8 補充說明
- 第3章 Go匯編語言
- 3.1 快速入門
- 3.1.1 實現和聲明
- 3.1.2 定義整型變量
- 3.1.3 定義字符串類型變量
- 3.1.4 定義main()函數
- 3.1.5 特殊字符
- 3.1.6 沒有分號
- 3.2 計算機體系結構
- 3.2.1 圖靈機和Brainfuck語言
- 3.2.2 《人力資源機器》游戲
- 3.2.3 x86-64體系結構
- 3.2.4 Go匯編中的偽寄存器
- 3.2.5 x86-64指令集
- 3.2.6 ARM64指令集
- 3.3 常量和全局變量
- 3.3.1 常量
- 3.3.2 全局變量
- 3.3.3 變量的內存布局
- 3.3.4 標識符規則和特殊標志
- 3.4 函數
- 3.4.1 基本語法
- 3.4.2 函數參數和返回值
- 3.4.3 參數和返回值的內存布局
- 3.4.4 函數中的局部變量
- 3.4.5 調用其他函數
- 3.4.6 宏函數
- 3.5 控制流
- 3.5.1 順序執行
- 3.5.2 if/goto跳轉
- 3.5.3 for循環
- 3.6 再論函數
- 3.6.1 函數調用規范
- 3.6.2 高級匯編語言
- 3.6.3 PCDATA和FUNCDATA
- 3.6.4 遞歸函數:1到n求和
- 3.6.5 閉包函數
- 3.6.6 調用約定
- 3.7 匯編語言的威力
- 3.7.1 系統調用
- 3.7.2 直接調用C語言函數
- 3.7.3 AVX指令集
- 3.8 補充說明
- 第4章 Go運行時
- 4.1 運行時概覽
- 4.1.1 調度器
- 4.1.2 內存分配器
- 4.1.3 垃圾收集器
- 4.1.4 網絡輪詢器
- 4.1.5 小結
- 4.2 調度器
- 4.2.1 生產者細節
- 4.2.2 消費者細節
- 4.2.3 任務隊列細節
- 4.2.4 處理阻塞
- 4.2.5 理解調度和延遲的關系
- 4.2.6 小結
- 4.3 內存分配器
- 4.3.1 逃逸分析
- 4.3.2 操作系統內存管理的二次抽象
- 4.3.3 內存分配器簡介
- 4.3.4 理解Go的內存占用
- 4.3.5 小結
- 4.4 垃圾收集器
- 4.4.1 語法垃圾和語義垃圾
- 4.4.2 并發標記清掃的核心流程
- 4.4.3 與Java分代機制的對比
- 4.4.4 一些常見的優化思路
- 4.4.5 小結
- 4.5 網絡輪詢器
- 4.5.1 傳統網絡編程
- 4.5.2 Go對操作系統的網絡API的封裝
- 4.5.3 阻塞易理解,回調難理解
- 4.5.4 goroutine的掛起和喚醒流程
- 4.5.5 網絡輪詢器的缺陷
- 4.5.6 小結
- 4.6 運行時性能分析
- 4.6.1 安裝依賴的Graphviz工具
- 4.6.2 CPU性能測試分析
- 4.6.3 內存分配性能測試分析
- 4.6.4 在程序中增加性能分析
- 4.6.5 性能分析引導的優化
- 4.6.6 持續性能分析
- 4.6.7 堆內存性能分析
- 4.6.8 小結
- 4.7 補充說明
- 第5章 Go編譯器
- 5.1 表達式
- 5.1.1 基礎表達式語法
- 5.1.2 表達式的語法分析
- 5.1.3 求值表達式
- 5.1.4 標識符:為表達式中引入變量
- 5.2 類型檢查
- 5.2.1 語義錯誤
- 5.2.2 go/types包
- 5.2.3 跨包的類型檢查
- 5.2.4 小結
- 5.3 語義分析
- 5.3.1 名字空間
- 5.3.2 整體架構
- 5.3.3 小結
- 5.4 SSA 中間代碼
- 5.4.1 SSA簡介
- 5.4.2 生成SSA
- 5.4.3 SSA解釋運行
- 5.4.4 SSA包的架構
- 5.4.5 小結
- 5.5 LLVM后端
- 5.5.1 最小編譯器
- 5.5.2 表達式手動轉換到LLVM IR程序
- 5.5.3 表達式自動轉換到LLVM IR程序
- 5.5.4 小結
- 5.6 示例:檢查append參數
- 5.6.1 append()函數的參數陷阱
- 5.6.2 Go語言社區的不同觀點
- 5.6.3 統計真實代碼發現問題
- 5.6.4 go vet自動識別這類問題
- 5.7 補充說明
- 第6章 RPC和Protobuf
- 6.1 RPC入門
- 6.1.1 RPC版“Hello World”
- 6.1.2 更安全的RPC接口
- 6.1.3 跨語言的RPC
- 6.1.4 HTTP上的RPC
- 6.2 Protobuf
- 6.2.1 Protobuf入門
- 6.2.2 定制代碼生成插件
- 6.2.3 自動生成完整的RPC代碼
- 6.3 玩轉RPC
- 6.3.1 客戶端RPC的實現原理
- 6.3.2 基于RPC實現監視功能
- 6.3.3 反向RPC
- 6.3.4 上下文信息
- 6.4 gRPC入門
- 6.4.1 gRPC技術棧
- 6.4.2 gRPC簡介
- 6.4.3 gRPC流
- 6.4.4 發布/訂閱模式
- 6.5 gRPC進階
- 6.5.1 證書認證
- 6.5.2 令牌認證
- 6.5.3 截取器
- 6.5.4 與Web服務共存
- 6.6 gRPC和Protobuf擴展
- 6.6.1 驗證器
- 6.6.2 REST風格的接口
- 6.6.3 Nginx
- 6.7 基于Protobuf的框架pbgo
- 6.7.1 Protobuf擴展語法
- 6.7.2 插件中讀取擴展信息
- 6.7.3 生成REST風格的接口的代碼
- 6.7.4 啟動REST服務
- 6.8 補充說明
- 第7章 Go Web編程
- 7.1 Go Web編程簡介
- 7.2 請求路由
- 7.2.1 HttpRouter簡介
- 7.2.2 HttpRouter原理
- 7.2.3 壓縮檢索樹創建過程
- 7.3 中間件
- 7.3.1 代碼泥潭
- 7.3.2 使用中間件剝離非業務邏輯
- 7.3.3 更優雅的中間件寫法
- 7.3.4 在中間件中適合做哪些事情
- 7.4 請求驗證
- 7.4.1 重構請求驗證函數
- 7.4.2 用請求驗證器減少重復勞動
- 7.4.3 請求驗證器原理
- 7.5 與數據庫交互
- 7.5.1 從database/sql講起
- 7.5.2 提高生產效率的ORM和SQL構建器
- 7.5.3 隱式SQL導致線上故障
- 7.5.4 基于SQLC的數據層開發
- 7.6 服務流量限制
- 7.6.1 流量限制算法——令牌桶算法
- 7.6.2 令牌桶算法原理
- 7.6.3 服務瓶頸和QoS
- 7.7 大型Web項目的分層
- 7.8 接口和表驅動開發
- 7.8.1 業務系統的發展過程
- 7.8.2 使用函數封裝業務流程
- 7.8.3 使用接口進行抽象
- 7.8.4 接口的優缺點
- 7.8.5 表驅動開發
- 7.9 灰度發布
- 7.9.1 通過分批次部署實現灰度發布
- 7.9.2 通過業務規則進行灰度發布
- 7.9.3 如何實現灰度發布規則
- 7.10 現代Go語言后端編程
- 7.10.1 Go Micro
- 7.10.2 Kratos
- 7.10.3 go-zero
- 7.10.4 小結
- 7.11 補充說明
- 第8章 Go和WebAssembly
- 8.1 WebAssembly簡介
- 8.1.1 誕生背景
- 8.1.2 終將被編譯為WebAssembly
- 8.2 你好,WebAssembly
- 8.2.1 用Go語言生成并執行WebAssembly模塊
- 8.2.2 在Node.js中執行WebAssembly模塊
- 8.2.3 在瀏覽器中執行WebAssembly模塊
- 8.2.4 小結
- 8.3 外部函數接口
- 8.3.1 使用JavaScript函數
- 8.3.2 回調Go語言函數
- 8.3.3 syscall/js包
- 8.3.4 WebAssembly模塊的導入函數
- 8.3.5 WASI規范
- 8.4 WebAssembly虛擬機
- 8.4.1 構建WebAssembly模塊
- 8.4.2 通過虛擬機執行
- 8.4.3 小結
- 8.5 示例:WebAssembly插件
- 8.5.1 MOSN的WebAssembly插件架構設計
- 8.5.2 認識Proxy-Wasm規范
- 8.5.3 處理HTTP請求示例
- 8.5.4 小結
- 8.6 導出Go語言函數
- 8.6.1 構建WebAssembly模塊
- 8.6.2 執行WebAssembly模塊
- 8.6.3 運行時限制
- 8.7 補充說明
- 第9章 Go GUI編程
- 9.1 Shiny框架入門
- 9.1.1 Hello Shiny
- 9.1.2 顯示圖像
- 9.1.3 核心組件
- 9.1.4 底層驅動程序
- 9.2 Fyne框架入門
- 9.2.1 安裝環境
- 9.2.2 安裝Fyne核心庫
- 9.2.3 Hello Fyne
- 9.2.4 回調函數
- 9.2.5 對話框
- 9.2.6 畫布
- 9.2.7 布局管理
- 9.2.8 Fyne在瀏覽器中
- 9.3 Walk框架入門
- 9.3.1 你好 Walk
- 9.3.2 聲明式語法
- 9.3.3 通過.manifest文件指定依賴
- 9.3.4 內置.manifest文件
- 9.3.5 給可執行程序添加圖標
- 9.3.6 添加版本信息
- 9.3.7 Walk的工作原理
- 9.4 國際化支持
- 9.4.1 你好,世界!
- 9.4.2 國際化實現原理
- 9.4.3 你好,世界!多語言版
- 9.4.4 制作翻譯文件
- 9.4.5 本地的語言環境
- 9.4.6 為何如此煩瑣
- 9.5 補充說明
- 第10章 大模型
- 10.1 AI機器人gabyhelp
- 10.1.1 Gaby框架
- 10.1.2 如何接入大語言模型
- 10.1.3 小結
- 10.2 DeepSeek
- 10.2.1 生成API key
- 10.2.2 Go語言SDK
- 10.2.3 Go語言驗證服務
- 10.2.4 多輪對話補全
- 10.2.5 推理模型
- 10.2.6 交互式對話
- 10.2.7 小結
- 10.3 LangChain for Go
- 10.3.1 連接OpenAI的大模型
- 10.3.2 連接DeepSeek
- 10.3.3 構建大模型聊天應用
- 10.3.4 小結
- 10.4 Ollama
- 10.4.1 安裝Ollama
- 10.4.2 下載大模型
- 10.4.3 運行大模型
- 10.4.4 本地大模型驅動聊天應用
- 10.4.5 小結
- 10.5 大模型智能體
- 10.5.1 計算常量表達式
- 10.5.2 集成到大模型流程中
- 10.5.3 應用到聊天服務中
- 10.5.4 小結
- 10.6 補充說明
- 后記 更新時間:2025-08-07 17:58:00