代码如下
package main
import (
"net/http"
"net/http/cgi"
)
func main() {
http.HandleFunc("/", Handler)
http.ListenAndServe(":8080", nil)
}
func Handler(w http.ResponseWriter, req *http.Request) {
var dir string = "D:/GOPATH/src/cgi"
cgi_obj := new(cgi.Handler)
//设置 cgi 运行目录
cgi_obj.Path = "D:/Go/bin/go"
//设置脚本目录
script := dir + req.URL.Path
//设置 CGI 可执行文件的工作目录
cgi_obj.Dir = dir
args := []string{"run", script}
//设置 传递给子进程的可选参数
cgi_obj.Args = append(cgi_obj.Args, args...)
//设置 GOPATH 目录 如果没有 会报go run: no go files listed 但是不影响运行
cgi_obj.Env = append(cgi_obj.Env, "GOPATH=D:/GOPATH")
//设置 GOROOT 目录 默认情况下 windows 会去找 C:/GO
cgi_obj.Env = append(cgi_obj.Env, "GOROOT=D:/Go")
//启用http server 重新实现 http Handler interface 接口
cgi_obj.ServeHTTP(w, req)
}
需要一个文件的配合
xiaochuan.go
package main
import (
"fmt"
)
func init() {
//设置header 头 记得要 加 两个\n
//否则访问 会有问题 cgi: no headers 错误
//如果一个 \n 会将结果输出到 终端 并提示cgi: bogus header line: This is xiaochuan gocgi test
fmt.Print("Content-Type: text/html;charset=utf-8\n\n")
}
func main() {
fmt.Println("This is xiaochuan gocgi test")
}
运行完成 直接 访问 http://127.0.0.1:8080/xiaochuan.go
即可