腾讯云函数计算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 ",context.GetRequestID(), context.GetFunctionBrn(), context.GetFunctionName(),context.GetFunctionVersion(), context.GetMemoryLimitMB())credential := context.GetCredential()if credential != nil {log.Printf("ak=%s, sk=%s, token=%s ",credential.AccessKeyId, credential.AccessKeySecret,
credential.SessionToken)}_, err := io.Copy(output, input)return err}
向运行时注册Handler

调用运行时中的RegisterNamedHandler来注册Handler,该函数原型如下:

func RegisterNamedHandler(name string, h InvokeHandler)

其中:

name 为handler名称,要与函数配置界面的处理器名称保持一致。

h 实现了InvokeHandler接口的对象

启动运行时

需要定义函数的执行入口main,并调用运行时的Main函数。

import ("flag""github.com/baidubce/bce-cfc-go/pkg/cfc")func main() {flag.Parse() // 进入框架,处理函数事件cfc.Main()}

调用运行时的Main函数后,运行时会自动等待事件请求。在事件请求到达时,运行时会自动调用用户注册的Handler实现功能调用。

编译代码

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

export GOOS=linuxexport GOARCH=amd64go build
打包输出

用户可以将生成的二进制执行文件打包到zip文件中,并上传zip包即可。

自定义程序启动参数

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

#!/bin/bashExecStart=( ./echo_demo "--alsologtostderr" "-v7")
上传函数代码

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

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

 

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

 

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

 

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

标签