2012-10-19 65 views
1

我可以使用下面的代碼作爲Apache的網站運行Go應用程序。在Apache下運行.go文件,通過'即時編譯'運行。

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工程應用。

但是現在我必須在源代碼中進行每次更改後重新編譯。

是否有可能在訪問http://localhost/hello.go時告訴Apache運行hello.go(Apache應運行go run hello.go)?

順便說一句,這只是加快發展,而不是生產!

+0

如何調用'go run'並將其用於'AddHandler'的批處理文件? – dskinner

+0

@dskinner:這不起作用:Apache執行批處理文件,但沒有輸出發送到瀏覽器 – JozyDaPozy

+0

請不要在生產的任何地方使用'go run'。恕我直言,它主要是作爲一次性實驗和/或類似活動的便利。 – zzzz

回答

1

一個簡單的解決方案是使用一種工具,它可以對源文件的更改重新編譯代碼。例如GoWatch

或者如Erik所述,使用fsnotify自己嘗試。例如:Simple Compile Daemon。您可以在CGI腳本中調用go run

+0

+1'$ ./CompileDaemon -directory = yourproject /' – Xeoncross

+0

CompileDaemon(使用fsnotify)爲我做了。謝謝! – JozyDaPozy

3

Go是一種編譯語言,您需要先編譯它。目前還沒有Go的任何口譯員/虛擬機。

最好的辦法是隻需要一個進程/ cron作業來檢查比二進制文件更新的.go文件,並在通知文件發生更改時重新生成.go文件。

https://github.com/howeyc/fsnotify是一個包,允許您觀看文件的變化。

+1

Go擁有出色的交叉編譯支持。我會建議在本地構建二進制文件,並將其上傳到您的服務器。 – simonmenke

1

您可以使用gorun,使您可以將#!/usr/bin/gorun行放在文件的頂部,以便它像腳本一樣運行。 gorun會立即編譯它然後運行它。我用它做了很多關於製作golang腳本的內容,我希望它也可以用於CGI。

您必須將腳本標記爲可執行文件(chmod +x)並告訴apache .go擴展名可執行。

不知道我會推薦這個生產,但它應該工作合理高效,因爲gorun有一個緩存。