

# 使用 Go 构建 Lambda 函数
<a name="lambda-golang"></a>

Go 的实施方式与其他托管式运行时系统不同。由于 Go 本机编译为可执行的二进制文件，因此它不需要专用的语言运行时。使用[仅限操作系统的运行时](runtimes-provided.md)（`provided` 运行时系列）将 Go 函数部署到 Lambda。

**Topics**
+ [Go 运行时系统支持](#golang-al1)
+ [工具和库](#golang-libraries)
+ [定义采用 Go 的 Lambda 函数处理程序](golang-handler.md)
+ [使用 Lambda 上下文对象检索 Go 函数信息](golang-context.md)
+ [使用 .zip 文件归档部署 Go Lambda 函数](golang-package.md)
+ [使用容器镜像部署 Go Lambda 函数](go-image.md)
+ [使用 Go Lambda 函数的层](golang-layers.md)
+ [Go Lambda 函数日志记录和监控](golang-logging.md)
+ [在 AWS Lambda 中检测 Go 代码](golang-tracing.md)

## Go 运行时系统支持
<a name="golang-al1"></a>

Lambda 的 Go 1.x 托管式运行时[已被弃用](lambda-runtimes.md#runtime-support-policy)。如果您具有使用 Go 1.x 运行时的函数，则必须将函数迁移到 `provided.al2023` 或 `provided.al2`。与 `go1.x` 相比，`provided.al2023` 和 `provided.al2` 运行时系统具有多种优势，包括支持 arm64 架构（AWS Graviton2 处理器）、二进制文件更小以及调用时间稍快。

此迁移无需更改任何代码。唯一需要进行的更改涉及如何构建部署包以及使用哪个运行时系统来创建函数。有关更多信息，请参阅“AWS Compute Blog”**上的 [Migrating AWS Lambda functions from the Go1.x runtime to the custom runtime on Amazon Linux 2](https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-from-the-go1-x-runtime-to-the-custom-runtime-on-amazon-linux-2/)。


| 名称 | 标识符 | 操作系统 | 弃用日期 | 阻止函数创建 | 阻止函数更新 | 
| --- | --- | --- | --- | --- | --- | 
|  仅限操作系统的运行时系统  |  `provided.al2023`  |  Amazon Linux 2023  |   2029 年 6 月 30 日   |   2029 年 7 月 31 日   |   2029 年 8 月 31 日   | 
|  仅限操作系统的运行时系统  |  `provided.al2`  |  Amazon Linux 2  |   2026 年 7 月 31 日   |   2026 年 8 月 31 日   |   Sep 30, 2026   | 

## 工具和库
<a name="golang-libraries"></a>

Lambda 为 Go 运行时提供了以下工具和库：
+ [适用于 Go 的 AWS SDK v2](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2)：适用于 Go 编程语言的官方 AWS SDK。
+ [github.com/aws/aws-lambda-go/lambda](https://github.com/aws/aws-lambda-go/tree/master/lambda)：适用于 Go 的 Lambda 编程模型的实现。AWS Lambda 使用此程序包调用您的[处理程序](golang-handler.md)。
+ [github.com/aws/aws-lambda-go/lambdacontext](https://github.com/aws/aws-lambda-go/tree/master/lambdacontext)：用于访问[上下文对象](golang-context.md)中的上下文信息的帮助程序。
+ [github.com/aws/aws-lambda-go/events](https://github.com/aws/aws-lambda-go/tree/master/events)：此库提供常见事件源集成的类型定义。
+ [github.com/aws/aws-lambda-go/cmd/build-lambda-zip](https://github.com/aws/aws-lambda-go/tree/master/cmd/build-lambda-zip)：此工具可用于在 Windows 上创建 .zip 文件存档。

有关更多信息，请参阅 GitHub 上的 [aws-lambda-go](https://github.com/aws/aws-lambda-go)。

Lambda 为 Go 运行时提供了以下示例应用程序：

**Go 中的 Lambda 应用程序示例**
+ [go-al2](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/go-al2)：返回公有 IP 地址的 hello world 函数。此应用程序使用 `provided.al2` 自定义运行时系统。
+ [blank-go](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-go) – 此 Go 函数显示 Lambda 的 Go 库、日志记录、环境变量和 AWS SDK 的使用情况。此应用程序使用 `go1.x` 运行时系统。