文件

Go 程式語言是一個開源專案,旨在讓程式設計師更具生產力。

Go 語言表達力強、簡潔、乾淨且高效。其併發機制使得編寫能充分利用多核心與聯網機器的程式變得容易,而其創新的型別系統則實現了靈活且模組化的程式建構。Go 編譯為機器碼的速度極快,同時又具備垃圾回收的便利性與執行時反射的強大功能。它是一種快速、靜態型別、編譯型的語言,用起來卻像動態型別的直譯語言。

開始吧

安裝 Go

下載與安裝 Go 的說明。

教學課程:入門

一個簡短的 Hello, World 教學以幫助入門。了解一些關於 Go 程式碼、工具、套件與模組的知識。

教學課程:建立模組

一系列簡短主題的教學,介紹函式、錯誤處理、陣列、映射 (map)、單元測試與編譯。

教學課程:多模組工作區入門

介紹在 Go 中建立與使用多模組工作區的基礎知識。多模組工作區對於跨多個模組進行變更非常有用。

教學課程:使用 Go 與 Gin 開發 RESTful API

介紹使用 Go 與 Gin 網路框架編寫 RESTful Web 服務 API 的基礎知識。

教學課程:泛型入門

透過泛型,您可以宣告並使用旨在與呼叫程式碼所提供的任何型別集合一起運作的函式或型別。

教學課程:模糊測試 (Fuzzing) 入門

模糊測試可以為您的測試產生輸入,藉此捕捉到您可能遺漏的邊緣案例與安全性問題。

編寫 Web 應用程式

建置一個簡單的 Web 應用程式。

如何編寫 Go 程式碼

本文件說明如何在模組內開發一組簡單的 Go 套件,並展示如何使用 go 指令來建置與測試套件。

Go 語言導覽 (A Tour of Go)

一份分為四部分的 Go 語言互動式介紹。第一部分涵蓋基本語法與資料結構;第二部分討論方法與介面;第三部分關於泛型;第四部分介紹 Go 的併發原語。每個部分結尾都有練習題,讓您能實踐所學。您可以線上進行導覽 (A Tour of Go) 或透過以下指令在本機安裝:

	$ go install golang.org/x/website/tour@latest
	

這會將 tour 二進位檔放置在您的 GOPATHbin 目錄中。

使用與理解 Go

高效 Go 程式設計 (Effective Go)

一份提供編寫清晰、慣用 Go 程式碼建議的文件。對於任何 Go 新手來說都是必讀內容。它補充了導覽與語言規範,建議先閱讀後兩者。

常見問題集 (FAQ)

關於 Go 的常見問題解答。

編輯器外掛與 IDE

一份總結常用且支援 Go 之編輯器外掛與 IDE 的文件。

Diagnostics (診斷)

總結了用於診斷 Go 程式問題的工具與方法。

Go 垃圾回收指南

一份描述 Go 如何管理記憶體以及如何充分利用它的文件。

管理相依性

當您的程式碼使用外部套件時,這些套件(以模組形式發佈)即成為相依性項目。

模糊測試 (Fuzzing)

Go 模糊測試的主要說明文件頁面。

Go 應用程式的測試覆蓋率

Go 應用程式覆蓋率測試的主要說明文件頁面。

配置引導最佳化 (PGO)

Go 應用程式配置引導最佳化 (PGO) 的主要說明文件頁面。

參考資料

套件說明文件

Go 標準函式庫的說明文件。

指令說明文件

Go 工具的說明文件。

語言規範

官方 Go 語言規範。

Go 模組參考

Go 相依性管理系統的詳細參考手冊。

go.mod 檔案參考

go.mod 檔案中所包含指令的參考。

Go 記憶體模型

一份明確規定了在何種條件下,一個 goroutine 對變數的讀取操作可以保證觀察到另一個 goroutine 對同一變數所產生寫入值的文件。

貢獻指南

為 Go 做出貢獻。

發佈歷史

Go 版本之間變更的摘要。

存取資料庫

教學課程:存取關聯式資料庫

介紹使用 Go 與標準函式庫中的 database/sql 套件存取關聯式資料庫的基礎知識。

存取關聯式資料庫

Go 資料存取功能的概覽。

開啟資料庫控制代碼

您使用 Go 資料庫控制代碼 (handle) 來執行資料庫操作。一旦您使用資料庫連線屬性開啟控制代碼,該控制代碼即代表由您管理的連線池。

執行不回傳資料的 SQL 陳述式

對於可能會變更資料庫的 SQL 操作(包括 SQL INSERTUPDATEDELETE),您應使用 Exec 方法。

查詢資料

對於從查詢回傳資料的 SELECT 陳述式,請使用 QueryQueryRow 方法。

使用預備陳述式 (Prepared Statements)

定義預備陳述式以重複使用,有助於您的程式碼避免每次執行資料庫操作時重新建立陳述式的開銷,從而執行得更快。

執行交易

sql.Tx 匯出了代表交易特定語意的方法,包括 CommitRollback,以及您用於執行一般資料庫操作的方法。

取消進行中的資料庫操作

使用 context.Context,當不再需要處理時,您可以讓應用程式的函式呼叫與服務提前停止運作並回傳錯誤。

管理連線

對於某些進階程式,您可能需要調整連線池參數或顯式操作連線。

避免 SQL 注入風險

透過將 SQL 參數值作為 sql 套件函式的引數傳遞,您可以避免 SQL 注入風險。

開發模組

開發與發佈模組

您可以將相關套件收集到模組中,然後發佈這些模組供其他開發人員使用。本主題概述了開發與發佈模組的流程。

模組發佈與版本控制工作流程

當您為其他開發人員開發模組時,可以遵循一套工作流程,幫助確保使用該模組的開發人員獲得可靠、一致的體驗。本主題描述該工作流程中的高階步驟。

管理模組原始碼

當您開發模組以供他人使用時,遵循本主題描述的儲存庫慣例,有助於確保其他開發人員更輕鬆地使用您的模組。

組織 Go 模組

在典型的 Go 專案中,組織檔案與目錄的正確方式是什麼?本主題根據您的模組類型討論了一些常見的佈局。

開發主版本更新

主版本更新可能會對您的模組使用者造成極大影響,因為它包含重大變更且代表一個新的模組。請在本主題中了解更多資訊。

發佈模組

當您想要讓其他開發人員可以使用某個模組時,請將其發佈,以便 Go 工具可以識別。一旦發佈了模組,匯入其套件的開發人員就能透過執行 go get 等指令來解析對該模組的相依性。

模組版本編號

模組開發人員使用模組版本號的每個部分來標示該版本的穩定性與向後相容性。對於每個新版本,模組的發佈版本號會明確反映該模組自上一個版本以來的變更性質。

演講

Go 影片導覽

讓 Go 變得快速、有趣且具生產力的三件事:介面、反射與併發。透過建立一個玩具級的網路爬蟲來進行示範。

優雅成長的程式碼

Go 的核心設計目標之一是程式碼的適應性;應能輕鬆地採取簡單的設計,並以乾淨、自然的方式進行建構。在此演講中,Andrew Gerrand 描述了一個簡單的 "chat roulette" 伺服器,它會配對傳入的 TCP 連線,然後利用 Go 的併發機制、介面與標準函式庫,透過 Web 介面與其他功能對其進行擴充。雖然程式的功能發生了劇烈變化,但 Go 的靈活性在程式成長的同時保留了原始設計。

Go 併發模式

併發是設計高效能網路服務的關鍵。Go 的併發原語(goroutines 與 channels)提供了一種簡單且高效的方式來表達併發執行。在此演講中,我們將看到複雜的併發問題如何用簡單的 Go 程式碼優雅地解決。

進階 Go 併發模式

此演講延伸了「Go 併發模式」的內容,進一步深入探討 Go 的併發原語。

更多內容

請參閱 Go Talks 網站Wiki 頁面 以取得更多 Go 演講。

Codewalks (程式碼導覽)

Go 程式的引導式導覽。

語言

套件

模組 (Modules)

工具

Wiki

由 Go 社群維護的 Go Wiki,包含關於 Go 語言、工具與其他資源的文章。

請參閱 Wiki 上的 學習 (Learn) 頁面,以獲取更多 Go 學習資源。

非英語說明文件

請參閱 Wiki 上的 非英語 (NonEnglish) 頁面,以獲取在地化說明文件。