1.3.4 Golang编程模型

优质
小牛编辑
129浏览
2023-12-01

示例代码:

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
}