通过'动态编译'从源代码运行Apache下的.go文件

时间:2012-10-19 14:45:04

标签: apache go

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

hello.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按预期工作。

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

在访问hello.go时,是否可以告诉Apache运行go run hello.go(Apache应该运行http://localhost/hello.go)?

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

3 个答案:

答案 0 :(得分:3)

Go是一种编译语言,您需要先编译它。目前还没有针对Go的任何口译员/虚拟机。

最好的办法是让一个进程/ cron作业检查.go文件比二进制文件更新,并在注意到文件发生更改时重建它。

https://github.com/howeyc/fsnotify是一个允许您观看文件以进行更改的软件包。

答案 1 :(得分:1)

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

或者像Erik已经说过的那样使用fsnotify自己尝试一下。示例:Simple Compile Daemon

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

答案 2 :(得分:1)

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

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

我不确定是否会将其推荐用于制作,但由于gorun有缓存,因此它应该合理有效。