golang cgi调用golang 程序
代码如下
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) }
需要一个文件的配合
yinzhong.go package main import ( "fmt" ) func init() { //设置header 头 记得要 加 两个\n //否则访问 会有问题 cgi: no headers 错误 //如果一个 \n 会将结果输出到 终端 并提示cgi: bogus header line: This is yinzhong gocgi test fmt.Print("Content-Type: text/html;charset=utf-8\n\n") } func main() { fmt.Println("This is yinzhong gocgi test") }
运行完成 直接 访问 http://127.0.0.1:8080/yinzhong.go
即可