Golang
所有文档

          函数计算 CFC

          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 mod download 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实现功能调用。

          编译代码

          编译代码时,需要设置GOOSGOARCH两个环境变量来指定对应的运行时环境。

          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包即可。

          注意:默认情况下,用户的函数zip包中应该只包含一个可执行文件,否则函数会执行失败。如需在函数zip包中包含多个可执行文件,您需要自定义程序启动参数,详见后续说明。

          自定义程序启动参数

          可以通过在zip包中添加一个bootstrap脚本文件,实现自定义的程序启动参数。 该文件中定义一个名为ExecStart的数组。示例如下:

          #!/bin/bash
          
          ExecStart=(
              ./echo_demo
              "--alsologtostderr"
              "-v7"
          )

          上传函数代码

          在成功创建Golang的二进制zip包后,您可以将其上传至CFC函数代码。步骤如下:

          1. 在百度云管理控制台中选择【产品服务】>【全部产品】>【函数计算 CFC】

          image.png

          1. 点击【创建函数】按钮,创建一个空白函数。函数运行时则选择Golang。

          image.png

          1. 在【函数代码】页面选择【上传函数.ZIP】包按钮,上传您打包好的二进制包。同时选择您的函数执行入口。

          image.png

          1. 上传完毕后,您可以使用默认测试事件测试函数是否部署成功。

          image.png

          示例代码

          完整的示例代码点此下载

          上一篇
          开发注意事项
          下一篇
          Java