golang cgi调用golang 程序

作者: adm 分类: go 发布时间: 2022-05-07 08:50

代码如下

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
即可

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!