使用 Go 编写阿里云函数计算实战指南

一、核心概念
  1. 函数计算:事件驱动的全托管计算服务
  2. Go 运行时:支持 Go 1.x 版本
  3. 执行模型
    • 事件触发:通过 API/OSS/定时器等触发
    • 无状态:每次执行独立环境
    • 冷启动:首次执行有初始化延迟
二、函数结构
package main

import (
	"context"
	"fmt"
)

type Event struct {
	Key   string `json:"key"`
	Value int    `json:"value"`
}

func HandleRequest(ctx context.Context, event Event) (string, error) {
	return fmt.Sprintf("处理事件: %s=%d", event.Key, event.Value), nil
}

三、部署流程
  1. 编译二进制
GOOS=linux GOARCH=amd64 go build -o bootstrap

  1. 创建部署包
zip deployment.zip bootstrap

  1. 阿里云控制台操作
    • 创建函数:选择 Go 运行时
    • 上传 deployment.zip
    • 设置执行入口:main.HandleRequest
四、触发器配置示例(API 网关)
# template.yml
ROSTemplateFormatVersion: '2015-09-01'
Resources:
  demo-service:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: '示例服务'
  demo-function:
    Type: 'Aliyun::Serverless::Function'
    Properties:
      Handler: main.HandleRequest
      Runtime: go1
      CodeUri: './deployment.zip'
      Events:
        http-trigger:
          Type: HTTP
          Properties:
            AuthType: ANONYMOUS
            Methods: ['GET', 'POST']

五、本地测试方法
func main() {
	// 模拟事件触发
	event := Event{Key: "test", Value: 42}
	res, err := HandleRequest(context.Background(), event)
	
	if err != nil {
		fmt.Println("执行错误:", err)
		return
	}
	fmt.Println("执行结果:", res)
}

六、最佳实践
  1. 性能优化

    var dbPool *sql.DB // 复用数据库连接
    
    func init() {
        // 冷启动时初始化
        dbPool = initDB()
    }
    

  2. 错误处理

    func HandleRequest(ctx context.Context, event Event) (resp string, err error) {
        defer func() {
            if r := recover(); r != nil {
                err = fmt.Errorf("运行时异常: %v", r)
            }
        }()
        
        // 业务逻辑
    }
    

  3. 日志输出

    import "github.com/aliyun/fc-runtime-go-sdk/fc"
    
    func HandleRequest(ctx context.Context, event Event) (string, error) {
        fc.Logger(ctx).Infof("收到事件: %+v", event)
        // ...
    }
    

七、调试技巧
  1. 使用 fc.InvokeFunction 本地调用
  2. 查看函数计算控制台日志
  3. 使用 --debug 参数获取详细错误信息:
    fun deploy --debug
    

八、典型应用场景
  1. RESTful API 后端
  2. 文件处理(OSS 触发器)
  3. 定时任务
  4. 消息处理(MQ 触发器)

注意事项

  1. 单文件大小上限:50MB(压缩包)
  2. 内存范围:128MB-3GB
  3. 超时时间:最大 600 秒
  4. 临时存储:/tmp 目录最大 512MB

通过以上步骤,您可快速构建基于 Go 的 Serverless 应用,享受按需付费、自动扩缩容等云原生优势。

更多推荐