
# 使用Go语言程序构建HTTP函数
#### 方案概述
本章节主要指导使用Go语言开发应用的用户，将业务部署到FunctionGraph。
由于HTTP函数本身不支持Go语言直接代码部署，因此本章节将以转换成二进制的方式为例，将Go编写的程序部署到FunctionGraph上。
#### 操作流程
**构建代码包**
创建源文件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**。然后，将go-http-demo和bootstrap打包为xxx.zip。
2. 在**windows** 机器下使用Golang编译器完成打包，具体步骤如下：
   ```
   # 切换编译环境方式
   # 查看之前的golang编译环境
   go env
   # 设置成linux对应的
   set GOARCH=amd64
   go env -w GOARCH=amd64
   set GOOS=linux
   go env -w GOOS=linux
   # go build -o [目标可执行程序] [源程序]
   # 例子
   go build -o go-http-demo main.go
   # 还原之前的编译环境
   set GOARCH=amd64
   go env -w GOARCH=amd64
   set GOOS=windows
   go env -w GOOS=windows
   ```
   
**创建HTTP函数并上传代码**
创建1个HTTP函数，并上传已打包的xxx.zip包。请参见[创建HTTP函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1441.html)。
**创建APIG专享版触发器**
请参见[使用APIG触发器](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0204.html)，创建APIG专享版触发器，"安全认证"建议选择"None"，方便调试。
图1APIG触发器   
![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002129786278.png "点击放大")
**调用测试**
将刚才创建的APIG触发器的URL+代码中注册的"/hello"复制到浏览器地址栏，可以看到页面返回结果如下：
图2请求结果   
![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002165305777.png "点击放大")
