文档
Go编程语言是一个旨在提高程序员生产力的开源项目。
Go语言表现力强、简洁、清晰且高效。其并发机制使得编写能够充分利用多核和网络机器的程序变得容易,而其新颖的类型系统支持灵活和模块化的程序构建。Go语言能快速编译成机器码,同时具备垃圾回收的便利性和运行时反射的强大能力。它是一种快速的、静态类型的、编译型语言,却给人以动态类型、解释型语言的体验。
入门指南
安装Go
下载和安装Go的说明。
教程:快速入门
一个简单的Hello, World教程,用于快速上手。学习一些关于Go代码、工具、包和模块的基础知识。
教程:创建模块
一个由简短主题组成的教程,介绍函数、错误处理、数组、映射、单元测试和编译。
教程:多模块工作空间入门
介绍在Go中创建和使用多模块工作空间的基础知识。多模块工作空间对于在多个模块之间进行修改非常有用。
教程:使用Go和Gin开发RESTful API
介绍使用Go语言和Gin Web框架编写RESTful Web服务API的基础知识。
教程:泛型入门
使用泛型,您可以声明并使用能够处理调用代码所提供的一组类型中任何一种的函数或类型。
教程:模糊测试入门
模糊测试可以生成测试输入,从而发现您可能遗漏的边缘情况和安全问题。
编写Web应用
构建一个简单的Web应用程序。
如何编写Go代码
本文档解释了如何在模块内开发一组简单的Go包,并展示了如何使用
go 命令
来构建和测试包。
Go语言之旅
一个分四个部分的Go语言互动入门介绍。 第一部分涵盖基本语法和数据结构;第二部分讨论方法和接口;第三部分介绍泛型;第四部分介绍Go语言的并发原语。 每个部分都以一些练习结尾,以便您实践所学内容。您可以在线游览,或通过以下方式在本地安装:
$ go install golang.org/x/website/tour@latest
这将把tour二进制文件放置在您的GOPATH的bin目录中。
使用和理解Go
高效Go编程
一份提供编写清晰、地道Go代码技巧的文档。 任何Go语言新手都必读。它补充了语言之旅和语言规范,这两份文档都应先阅读。
常见问题 (FAQ)
关于Go语言常见问题的解答。
编辑器插件和IDE
一份总结了常用编辑器插件和具有Go支持的IDE的文档。
诊断
总结了用于诊断Go程序问题的工具和方法论。
Go垃圾回收器指南
一份描述Go如何管理内存以及如何充分利用其功能的文档。
管理依赖
当您的代码使用外部包时,这些包(作为模块分发)就成为了依赖项。
模糊测试
Go模糊测试的主要文档页面。
Go应用的覆盖率
Go应用程序覆盖率测试的主要文档页面。
配置文件引导优化
Go 应用程序配置文件引导优化(PGO)的主要文档页面。
参考资料
包文档
Go 标准库的文档。
命令文档
Go 工具的文档。
语言规范
官方的 Go 语言规范。
Go Modules 参考
Go 依赖管理系统的详细参考手册。
go.mod 文件参考
go.mod 文件中包含的指令参考。
Go 内存模型
该文档规定了在何种条件下,一个 goroutine(协程)中读取变量能够保证观察到另一个 goroutine(协程)中写入该变量所产生的值。
贡献指南
参与 Go 语言的贡献。
发布历史
Go 版本之间变更的摘要。
访问数据库
教程:访问关系型数据库
介绍使用 Go 和标准库中的 database/sql 包访问关系型数据库的基础知识。
访问关系型数据库
Go 数据访问功能概述。
打开数据库句柄
使用 Go 数据库句柄来执行数据库操作。当您使用数据库连接属性打开一个句柄后,该句柄就代表了一个由它为您管理的连接池。
执行不返回数据的 SQL 语句
对于可能更改数据库的 SQL 操作,包括 SQL INSERT、UPDATE 和 DELETE,您需要使用 Exec 方法。
查询数据
对于从查询返回数据的 SELECT 语句,请使用 Query 或 QueryRow 方法。
使用预编译语句
定义一个可重复使用的预编译语句,可以通过避免每次执行数据库操作时重新创建语句的开销,帮助您的代码运行得更快一些。
执行事务
sql.Tx 导出了表示事务特定语义的方法,包括 Commit 和 Rollback,以及您用来执行常见数据库操作的方法。
取消正在进行的数据库操作
使用 context.Context,您可以使应用程序的函数调用和服务在不再需要处理时提前停止工作并返回错误。
管理连接
对于一些高级程序,您可能需要调整连接池参数或显式处理连接。
避免 SQL 注入风险
您可以通过将 SQL 参数值作为 sql 包函数的参数来避免 SQL 注入风险。
开发模块
开发和发布模块
您可以将相关的包收集到模块中,然后发布这些模块供其他开发者使用。本主题概述了模块的开发和发布。
模块发布与版本管理工作流
当您开发供其他开发者使用的模块时,您可以遵循一个工作流,以帮助确保使用该模块的开发者获得可靠、一致的体验。本主题描述了该工作流中的高级步骤。
管理模块源代码
当您开发要发布供他人使用的模块时,通过遵循本主题中描述的仓库惯例,可以帮助确保您的模块更易于其他开发者使用。
组织一个Go模块
在典型的Go项目中,组织文件和目录的正确方式是什么?本主题根据模块类型的不同,讨论了一些常见的布局方式。
开发主要版本更新
主要版本更新可能对模块的用户产生很大影响,因为它包含破坏性变更并代表一个全新的模块。在此主题中了解更多。
发布模块
当您希望使模块可供其他开发者使用时,您需要发布它,以便Go工具能够识别。发布模块后,导入其包的开发者将能够通过运行类似 go get 的命令来解决对该模块的依赖。
模块版本编号
模块的开发者使用版本号的每个部分来指示版本的稳定性和向后兼容性。对于每次新发布,模块的版本号具体反映了自上一发布以来模块变更的性质。
技术演讲
Go语言视频导览
让Go快速、有趣且高效的三个特性:接口、反射和并发。通过构建一个玩具网络爬虫来演示这些特性。
优雅增长的代码
Go的关键设计目标之一是代码适应性;即能够轻松地从简单设计出发,以清晰自然的方式进行构建。在本次演讲中,Andrew Gerrand描述了一个简单的“聊天轮盘”服务器,该服务器将传入的TCP连接进行配对,然后利用Go的并发机制、接口和标准库来扩展其Web界面和其他功能。虽然程序的功能发生了巨大变化,但Go的灵活性在代码增长过程中保留了原始设计。
Go并发模式
并发是设计高性能网络服务的关键。Go的并发原语(goroutine 和 channel)提供了一种简单高效的方式表达并发执行。在本次演讲中,我们将看到如何用简单的Go代码优雅地解决复杂的并发问题。
高级Go并发模式
本次演讲扩展了Go并发模式演讲的内容,更深入地探讨了Go的并发原语。
更多
更多Go演讲请访问 Go Talks 网站 和 Wiki页面。
代码导览
Go程序的导览式讲解。
语言特性
标准库包
- JSON与Go - 使用 json 包。
- 海量数据 - gob 包的设计与使用。
- 反射定律 - reflect 包的基本原理。
- Go图像包 - image 包的基本原理。
- Go图像绘制包 - image/draw 包的基本原理。
模块
- 使用 Go 模块 - 在简单项目中使用模块的介绍。
- 迁移到 Go 模块 - 将现有项目转换为使用模块。
- 发布 Go 模块 - 如何让模块的新版本可供他人使用。
- Go 模块:v2 及更高版本 - 创建和发布主版本 2 及更高版本。
- 保持模块兼容性 - 如何保持模块与先前次要版本/补丁版本的兼容性。
工具
- 关于 Go 命令 - 我们为何编写它,它是什么,它不是什么,以及如何使用它。
- Go 文档注释 - 编写良好的程序文档
- 使用 GDB 调试 Go 代码
- 竞态检测器 - 竞态检测器手册。
- Go 汇编语言快速指南 - 介绍 Go 使用的汇编器。
- C?Go?Cgo! - 使用 cgo 链接 C 代码。
- Go 程序性能分析 - 用于测量代码 CPU 和内存使用情况的工具
- 介绍 Go 竞态检测器 - 竞态检测器介绍。
- Gopls:Go 语言服务器 - 在 Go 开发中充分利用您的编辑器。
Wiki
由 Go 社区维护的 Go Wiki 包含了关于 Go 语言、工具及其他资源的文章。
非英语文档
有关本地化文档,请参阅 Wiki 中的 NonEnglish 页面。