
# 使用Go开发HTTP函数
本章节介绍使用Go运行时开发HTTP函数，更多HTTP详情，请参见[创建HTTP函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1441.html)。
#### 约束与限制
- HTTP函数只能绑定APIG/APIC触发器，根据函数和APIG/APIC之间的转发协议。 **函数的返回合法的http响应报文中必须包含body(String)、statusCode(int)、headers(Map)和isBase64Encoded(boolean)，HTTP函数会默认对返回结果做Base64编码，isBase64Encoded默认为true，其它框架同理。** **相关约束条件请参考** **[Base64解码和返回结构体的说明](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0102.html#functiongraph_02_0102__li176282148442)。**
  
- HTTP函数默认开放端口为8000。
- Context类中提供了许多上下文方法供用户使用，其声明和功能请参见[表19](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0504.html#functiongraph_02_0504__table4315136814851)。
 
#### 使用Go开发HTTP函数示例
**示例概述：**
由于HTTP函数本身不支持Go语言直接代码部署，因此本示例将以转换成二进制的方式为例，将Go编写的程序部署到FunctionGraph上。
**操作步骤：**
具体操作步骤请参见[使用Go语言程序构建HTTP函数](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_1168.html)。
#### 代码示例
源文件main.go的代码内容如下，可参考使用：
```
// main.go
package main
import (
"fmt"
"net/http"
"github.com/emicklei/go-restful"
)
func registerServer() {
fmt.Println("Running a Go Http server at localhost:8000/")
ws := new(restful.WebService)
ws.Path("/")
ws.Route(ws.GET("/hello").To(Hello))
c := restful.DefaultContainer
c.Add(ws)
fmt.Println(http.ListenAndServe(":8000", c))
}
func Hello(req *restful.Request, resp *restful.Response) {
resp.Write([]byte("nice to meet you"))
}
func main() {
registerServer()
}
```
```
# bootstrap
/opt/function/code/go-http-demo
```
在main.go中，使用8000端口启动了一个HTTP服务器，并注册了path为/hello的API，调用该API将返回"nice to meet you"。
#### 编译打包
1. 在linux机器下，将上述代码进行编译：go build -o go-http-demo main.go。
2. 将go-http-demo和bootstrap打包为xxx.zip。
 
#### 创建HTTP函数
在FunctionGraph函数工作流中新建一个HTTP函数，然后上传刚才打包的xxx.zip代码。
 #### 创建APIG触发器
新建一个APIG触发器，选择一个合适的分组和发布环境后，直接确认即可（测试阶段可以不用安全认证，即为None）。
图1复制URL   
![](https://support.huaweicloud.com/devg-functiongraph/zh-cn_image_0000002276933748.png "点击放大")
#### 调用测试
将[创建APIG触发器]中生成的"调用URL"+"代码中注册的Path"+"/hello"复制到浏览器地址栏，可以看到页面返回结果如下：
图2返回结果   
![](https://support.huaweicloud.com/devg-functiongraph/zh-cn_image_0000001644957097.png "点击放大")
