Golang编程模型

示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. "encoding/json"
  5. )
  6. type Cmd struct {
  7. Mid int
  8. }
  9. func Handler(b []byte) []byte{
  10. cmd := &Cmd{}
  11. err := json.Unmarshal(b, cmd)
  12. if err != nil {
  13. fmt.Println("json format error:", err)
  14. }
  15. fmt.Println("cmd:", cmd)
  16. result, _ := json.Marshal(cmd)
  17. return result
  18. }

上述文件保存到hello.go的文件中,需要把hello.go文件编译成so文件,然后在将so文件上传到函数计算服务平台。需要注意的是,编译后的文件必须以.so结尾,否则无法在函数计算平台上执行。由于函数计算内部golang运行环境为alpine linux,所以需要用户将go文件编译成alpine环境的so文件。

用户可以自己构建一个函数计算函数编译镜像来进行代码的编译,也可以直接从dockerhub上下载已经打包的镜像,打包好的镜像为:xiaomifaas/golang:1.9-alpine3.6, Dockerfile如下:

  1. FROM golang:1.9-alpine3.6
  2. RUN apk --update --no-cache add libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc

镜像下载以后,切换到go文件的目录,执行如下命令即可生成main.so文件:

  1. 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文件可以减少文件大小:

  1. zip -r code.zip main.so

到函数计算页面创建函数,函数入口是代码中函数的名字,此例中为Handler,上传main.so或者code.zip文件,测试数据为:

  1. {
  2. "Mid": 3
  3. }

原文: http://docs.api.xiaomi.com/faas/编程模型/section5.html