Golang
简单示例
本示例创建一个简单的echo函数,该函数将调用事件的内容回显出来。
创建项目
$ mkdir echo_demo
$ cd echo_demo
$ go mod init github.com/baidubce/echo_demo
添加runtime依赖
go runtime运行时位于github.com/baidubce/bce-cfc-go
,可以通过如下命令添加项目依赖:
$ go get github.com/baidubce/bce-cfc-go
创建Handler
函数的Handler需要实现InvokeHandler
接口,该接口原型定义如下:
type InvokeHandler interface {
Handle(input io.Reader, output io.Writer, context InvokeContext) error
}
Handle函数有三个参数:
input 用户输入的事件。
output 函数执行的结果。
context 函数执行所需的context。
该示例中定义EchoHandler
,它将input事件拷贝至output,代码如下:
import (
"io"
"log"
"github.com/baidubce/bce-cfc-go/pkg/cfc"
)
type EchoHandler struct {
}
func (h *EchoHandler) Handle(input io.Reader, output io.Writer, context cfc.InvokeContext) error {
log.Printf("reqid=%s, brn=%s, name=%s, ver=%s, mem=%d\n",
context.GetRequestID(), context.GetFunctionBrn(), context.GetFunctionName(),
context.GetFunctionVersion(), context.GetMemoryLimitMB())
credential := context.GetCredential()
if credential != nil {
log.Printf("ak=%s, sk=%s, token=%s\n",
credential.AccessKeyId, credential.AccessKeySecret, credential.SessionToken)
}
_, err := io.Copy(output, input)
return err
}
向运行时注册Handler
使用init函数,调用运行时中的RegisterNamedHandler
来注册Handler,该函数原型如下:
func RegisterNamedHandler(name string, h InvokeHandler)
其中:
name 为handler名称,要与函数配置界面的处理器名称
保持一致。
h 实现了InvokeHandler接口的对象
在上述示例中,则需添加如下代码:
func init() {
cfc.RegisterNamedHandler("echo_handler", &EchoHandler{})
}
启动运行时
需要定义函数的执行入口main
,并调用cfc运行时的Main
函数。
import (
"flag"
"github.com/baidubce/bce-cfc-go/pkg/cfc"
)
func main() {
flag.Parse()
// 进入框架,处理函数事件
cfc.Main()
}
调用运行时的Main
函数后,运行时会自动等待事件请求。在事件请求到达时,运行时会自动调用用户注册的Handler实现功能调用。
编译代码
编译代码时,需要设置GOOS
和GOARCH
两个环境变量来指定对应的运行时环境。建议您在Linux环境下编译。
export GOOS=linux
export GOARCH=amd64
go build
函数的运行文件必须为可执行文件,通过go build
编译,会产生一个二进制可执行文件,如下:
$ ls -lah echo_demo
-rwxr-xr-x 1 work 2.7M 4 3 14:37 echo_demo
您也可以使用如下命令为您的二进制文件添加可执行权限:
$ chmod a+x echo_demo
打包输出
用户可以将生成的二进制执行文件打包到zip文件中,并上传zip包即可。建议您使用Linux的打包工具。
注意:默认情况下,用户的函数zip包中应该只包含一个可执行文件,否则函数会执行失败。如需在函数zip包中包含多个可执行文件,您需要自定义程序启动参数,详见后续说明。
自定义程序启动参数
可以通过在zip包中添加一个bootstrap
脚本文件,实现自定义的程序启动参数。
该文件中定义一个名为ExecStart
的数组。示例如下:
#!/bin/bash
ExecStart=(
./echo_demo
"--alsologtostderr"
"-v7"
)
上传函数代码
在成功创建Golang的二进制zip包后,您可以将其上传至CFC函数代码。步骤如下:
- 在百度云管理控制台中选择【产品服务】>【全部产品】>【函数计算 CFC】
- 点击【创建函数】按钮,创建一个空白函数。函数运行时则选择Golang。
- 在【函数代码】页面选择【上传函数.ZIP】包按钮,上传您打包好的二进制包。同时选择您的函数执行入口。
- 上传完毕后,您可以使用默认测试事件测试函数是否部署成功。
示例代码
完整的示例代码点此下载