Golang函数开发指南
目前支持的Golang开发语言版本为1.13.8。
1. 函数定义
Golang1.13.8需要在安装了go 1.13.8 的linux服务器上开发
入口函数名(Handler):入口函数的名称,需要和函数执行入口处用户自定义的入口函数名称一致,需要注意的是,golang的入口函数开头需要为大写。
执行事件(event):传给函数执行的实际参数,类型为[]byte。
在页面触发测试中,event为用户输入的测试事件参数
在http触发器中,event为用户POST,PUT方法的body内容。
在其他触发器中,event为平台封装的cloudevent格式数据。
函数中需要将event序列化到提前定义好的结构体Event中
上下文环境(context):Runtime提供了函数执行的上下文,通过上下文对象context,可以在函数中获取相关函数执行的上下文环境,具体接口定义在SDK接口中说明。
函数执行入口:
函数执行入口格式”[文件名].[函数名]”,例如创建函数是设置为index.Handler,那么函数计算会自动加载index模块中定义的Handler函数,如下图所示:
2. SDK接口
Context类中提供了一下上下文方法供用户使用,其声明和功能如下表所示:
方法名 |
方法说明 |
context.GetRequestID() |
获取请求ID |
context.GetStartTime() |
获取函数执行时间 |
context.GetFunctionName() |
获取函数名或函数id |
context.GetVersion() |
获取函数当前版本 |
context.GetMemorySize() |
获取函数配置内存 |
3. 如何开发Golang函数
开发Goalng函数步骤如下。
步骤 1 开发函数
Golang 1.13.8的函数需要本地开发,并编译成插件上传到函数计算平台。
(1)编写统一context接口
登录已经安装了golang 1.13.8运行环境的linux服务器,创建目录/home/sfcgo/src/go-runtime/pkg/context,并完成以下操作:
$ mkdir -p /home/sfcgo/src/go-runtime/pkg/context
$ vi /home/sfcgo/src/go-runtime/pkg/context/client_context.go,直接拷贝以下内容到文件中
package context
type Context interface {
GetRequestID() string
GetStartTime() string
GetFunctionName() string
GetVersion() string
GetMemorySize() string
}
(2)开发用户函数
在目录/home/sfcgo/src/go-runtime中创建函数文件,并实现如下接口:
func Handler(event []byte, context context.Context) (interface{}, error)
其中event为传递给函数的body数据,context为函数提供服务的上下文对象,具体提供方法可参考
SDK接口,编写如下示例函数代码:
vi /home/sfcgo/src/go-runtime/index.go
package main
import (
"encoding/json"
"fmt"
"go-runtime/pkg/context"
)
type Event struct {
Key string `json:"key"`
}
func Handler(event []byte, context context.Context) (interface{}, error) {
var ev *Event
err := json.Unmarshal(event, &ev)
if err != nil {
return nil, fmt.Errorf("invalid request payload")
}
fmt.Println(ev.Key)
result := fmt.Sprintf("Value: %s, time: %s", ev.Key, context.GetStartTime())
return result, nil
}
步骤 2 编译和打包
函数编码完毕后,按照如下方式进行编译打包。
(1) 设置GOROOT和GOPATH环境变量
$ export GOROOT=/usr/local/go (假设Go安装到了/usr/local/go目录)
$ export PATH=$GOROOT/bin:$PATH
$ export GOPATH=/home/sfcgo
(2) 编译代码
$ cd /home/sfcgo/src/go-runtime
$ go mod init
$ go build -buildmode=plugin -o index.so index.go
编译后会在当前目录生产index.so文件
(3) 打包代码
$ zip index.zip index.so
步骤 3 创建函数
登录函数计算控制台,创建函数,编辑函数名称,选择所属应用,选择golang1.13.8运行环境
上传打包好的index.zip文件,点击确定创建函数。
4. 测试函数
步骤 1 创建测试事件
进入函数详情页,选择测试事件,点击创建测试事件
由于golang为静态语言,因此需要根据函数代码中的解析规则编写测试时间
type Event struct {
Key string `json:"key"`
}
事件的的键名要为key,否则无法被函数序列化
根据需要输入测试事件的body内容。
步骤 1 执行测试事件
在函数详情页面,选择具体的测试事件,点击执行。
执行后,分为三部分结果展示,分别为函数执行结果、函数执行摘要、函数执行日志。