在函数计算服务使用Go编程,需要定义一个Go函数作为入口。本文介绍了Go HTTP函数的结构和特点。

HTTP函数定义

Go的HTTP函数的定义,请参见Go标准库HTTP中的handler interface,并新增一个context参数。示例如下:

function(ctx context.Context, w http.ResponseWriter, req *http.Request) error

函数定义中包含以下三部分内容:

请求结构体

http.Request是Go标准库HTTP中的定义,目前支持的参数和方法如下表所示。

参数 类型 描述
Method String HTTP方法,例如PUT、POST、DELETE等。
URL *url.URL 请求地址信息。
Header http.Header HTTP请求头部的键值对。
Body io.ReadCloser 请求结构体。
ContentLength Int64 请求结构体数据长度。

响应接口

实现了http.ResponseWriter声明的三个方法,示例如下:

type ResponseWriter interface {
    Header() Header
    Write([]byte) (int, error)
    WriteHeader(statusCode int)
}

说明如下:

  • WriteHeader(statusCode int):设置状态码。
  • Header() Header:获取并设置响应头信息。
  • Write([]byte) (int, error):设置响应体。

限制说明

  • 请求限制

    如果超过以下限制,会返回400状态码和InvalidArgument错误码。

    字段 限制说明 HTTP状态码 错误码
    headers 请求头中的所有键和值的总大小不能超过4 KB。 400 InvalidArgument
    path 请求路径以及所有查询参数的总大小不能超过4 KB。
    body HTTP body的总大小不能超过6 MB。
  • 响应限制

    如果超过以下限制,会返回502状态码和BadResponse错误码。

    字段 限制说明 HTTP状态码 错误码
    headers 响应头中的所有键和值对的大小不能超过4 KB。 502 BadResponse
    body HTTP body的大小不能超过6 MB。

Go HTTP函数示例

以下代码示例演示了如何使用Go HTTP函数。

package main

import (
    "context"
    "net/http"
    "github.com/aliyun/fc-runtime-go-sdk/fc"
)

func main() {
    fc.StartHttp(HandleHttpRequest)
}

func HandleHttpRequest(ctx context.Context, w http.ResponseWriter, req *http.Request) error {
    w.WriteHeader(http.StatusOK)
    w.Header().Add("Content-Type", "text/plain")
    w.Write([]byte("hello, world!\n"))
    return nil
}