1

我可以使用以下代码通过 Apache 将 Go 应用程序作为网站运行。

你好.go

package main

import (
    "os"
)

func main() {
    os.Stdout.WriteString("Content-Type: text/html; charset=UTF-8\n\n")
    os.Stdout.WriteString("Hello!\n")
}

.htaccess

AddHandler cgi-script .exe

go build hello.go我使用并按http://localhost/hello.exe预期工作来编译应用程序。

但是现在我必须在每次更改源代码后重新编译。

访问时是否可以以某种方式告诉 Apache 运行hello.go(Apache 应该运行go run hello.gohttp://localhost/hello.go

顺便说一句,这只是为了加快开发速度,而不是为了生产!

4

3 回答 3

3

Go 是一种编译语言,你需要先编译它。目前没有任何 Go 的解释器/VM。

最好的办法是只使用一个进程/cron 作业来检查 .go 文件是否比二进制文件更新,并在发现文件更改时重新构建它。

https://github.com/howeyc/fsnotify是一个允许您监视文件更改的包。

于 2012-10-19T15:38:23.753 回答
2

您可以使用gorun#!/usr/bin/gorun ,它使您能够在文件顶部放置一行,使其像脚本一样运行。gorun 将即时编译它然后运行它。我已经用它来制作 golang 脚本了,我希望它也适用于 CGI。

您必须将脚本标记为可执行 ( chmod +x) 并告诉 apache 该.go扩展是可执行的。

不确定我是否会推荐它用于生产,但它应该像gorun缓存一样有效地工作。

于 2012-10-26T19:18:08.550 回答
1

一个简单的解决方案是使用一个工具来重新编译源文件更改的代码。例如GoWatch.

fsnotify或者按照 Erik 已经说明的方式自己尝试一下。示例:简单编译守护进程

您也可以go run在您的 CGI 脚本中调用。

于 2012-10-19T17:51:05.333 回答