Golang编程模型
示例代码:
package main
import (
"fmt"
"encoding/json"
)
type Cmd struct {
Mid int
}
func Handler(b []byte) []byte{
cmd := &Cmd{}
err := json.Unmarshal(b, cmd)
if err != nil {
fmt.Println("json format error:", err)
}
fmt.Println("cmd:", cmd)
result, _ := json.Marshal(cmd)
return result
}
上述文件保存到hello.go的文件中,需要把hello.go文件编译成so文件,然后在将so文件上传到函数计算服务平台。 需要注意的是,编译后的文件必须以.so结尾,否则无法在函数计算平台上执行。 由于函数计算内部golang运行环境为alpine linux,所以需要用户将go文件编译成alpine环境的so文件。
用户可以自己构建一个函数计算函数编译镜像来进行代码的编译,也可以直接从dockerhub上下载已经打包的镜像, 打包好的镜像为:xiaomifaas/golang:1.9-alpine3.6, Dockerfile如下:
FROM golang:1.9-alpine3.6
RUN apk --update --no-cache add libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc
镜像下载以后,切换到go文件的目录,执行如下命令即可生成main.so文件:
docker run --rm -v $(pwd):/build -w /build xiaomifaas/golang:1.9-alpine3.6 go build -buildmode=plugin -o main.so
然后用户可以直接上传.so文件或者打包so文件成zip文件之后,上传zip文件。打包.so文件可以减少文件大小:
zip -r code.zip main.so
到函数计算页面创建函数,函数入口是代码中函数的名字,此例中为Handler,上传main.so或者code.zip文件,测试数据为:
{
"Mid": 3
}