文档
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 的文档。
Diagnostics
总结了诊断 Go 程序问题的工具和方法。
Go 垃圾收集器指南
一份描述 Go 如何管理内存以及如何充分利用内存的文档。
管理依赖项
当你的代码使用外部包时,这些包(以模块形式分发)就成为依赖项。
模糊测试
Go 模糊测试的主文档页面。
Go 应用程序的覆盖率
Go 应用程序覆盖率测试的主文档页面。
配置文件引导优化
Go 应用程序配置文件引导优化 (PGO) 的主文档页面。
参考
包文档
Go 标准库的文档。
命令文档
Go 工具的文档。
语言规范
官方 Go 语言规范。
Go 模块参考
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 和通道)提供了一种简单有效的方式来表达并发执行。在本次演讲中,我们将看到如何用简单的 Go 代码优雅地解决棘手的并发问题。
高级 Go 并发模式
本次演讲在《Go 并发模式》演讲的基础上,深入探讨了 Go 的并发原语。
更多
代码漫游
Go 程序的引导式教程。
语言
- JSON-RPC:一个关于接口的故事
- Go 的声明语法
- Defer、Panic 和 Recover
- Go 并发模式:超时,继续
- Go 切片:用法和内部原理
- 一个 GIF 解码器:Go 接口练习
- 错误处理和 Go
软件包
- JSON 和 Go - 使用 json 包。
- 大量数据 - gob 包的设计和使用。
- 反射定律 - reflect 包的基础知识。
- Go image 包 - image 包的基础知识。
- Go image/draw 包 - image/draw 包的基础知识。
模块
- 使用 Go 模块 - 在简单项目中引入模块的使用。
- 迁移到 Go 模块 - 将现有项目转换为使用模块。
- 发布 Go 模块 - 如何将新版本的模块提供给其他人。
- Go 模块:v2 及更高版本 - 创建和发布主要版本 2 及更高版本。
- 保持模块兼容 - 如何保持模块与之前的次要/补丁版本兼容。
工具
- 关于 Go 命令 - 我们为什么编写它,它是什么,它不是什么,以及如何使用它。
- Go Doc 注释 - 编写良好的程序文档
- 使用 GDB 调试 Go 代码
- 数据竞争检测器 - 数据竞争检测器手册。
- Go 汇编器快速指南 - Go 使用的汇编器介绍。
- C? Go? Cgo! - 使用 cgo 链接 C 代码。
- Go 程序性能分析 - 测量代码 CPU 和内存使用情况的工具
- Go 竞争检测器介绍 - 竞争检测器介绍。
- Gopls:Go 语言服务器 - 在使用 Go 时充分利用你的编辑器。
维基
由 Go 社区维护的 Go Wiki 包含有关 Go 语言、工具和其他资源的文章。