英文:
Run a .go file under Apache from source by 'compiling on the fly'
问题
我能够使用以下代码将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
可以正常工作。
但是现在,每次我在源代码中进行更改后,都必须重新编译。
有没有办法告诉Apache在访问http://localhost/hello.go
时运行hello.go
(Apache应该运行go run hello.go
)?
顺便说一句,这只是为了加快开发速度,不用于生产环境!
英文:
I'm able to run a Go application as a website with Apache using the following code.
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
I compile the app using go build hello.go
and going to http://localhost/hello.exe
works as expected.
But now I have to recompile after every change I make in the sourcecode.
Is it somehow possible to tell Apache to run hello.go
(Apache should run go run hello.go
) when visiting http://localhost/hello.go
?
By the way, this is only to speed development, not for production!
答案1
得分: 3
Go是一种编译语言,你需要先编译它。目前还没有任何Go的解释器/虚拟机。
你最好的选择是创建一个进程/定时任务,检查.go文件是否比二进制文件更新,并在发现文件变化时重新构建它。
https://github.com/howeyc/fsnotify 是一个允许你监视文件变化的包。
英文:
Go is a compiled language, you'd need to compile it first. There currently aren't any interpreters/VM's for Go.
You're best bet is to just have a process/cron job that checks for the .go file being newer than the binary, and rebuilding it when it notices the file changed.
https://github.com/howeyc/fsnotify is a package that allows you to watch files for changes.
答案2
得分: 2
你可以使用gorun,它允许你在文件顶部加上#!/usr/bin/gorun
这一行,使其像脚本一样运行。gorun会即时编译并运行它。我经常用它来创建golang脚本,我认为它也适用于CGI。
你需要将脚本标记为可执行(chmod +x
),并告诉apache .go
扩展名是可执行的。
不确定我是否推荐在生产环境中使用,但它应该相当高效,因为gorun
有一个缓存。
英文:
You could use gorun which enables you to put a #!/usr/bin/gorun
line at the top of the file so it is run like a script. gorun will compile it on the fly then run it. I've used it quite a bit for making golang scripts and I expect it would work for CGIs too.
You'd have to mark the script as executable (chmod +x
) and tell apache that the .go
extension was executable.
Not sure I'd recommend this for production but it should work reasonably efficiently as gorun
has a cache.
答案3
得分: 1
一个简单的解决方案是使用一个工具,在源文件发生变化时重新编译你的代码。例如GoWatch
。
或者你可以尝试使用fsnotify
,就像Erik已经提到的那样。例如:简单的编译守护进程。
你也可以在你的CGI脚本中调用go run
。
英文:
An easy solution would be to use a tool which re-compiles your code on changes to the source files. For example GoWatch
.
Or try it yourself by using fsnotify
as Erik already stated. Example: Simple Compile Daemon.
You could also invoke go run
in your CGI script.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论