Il est possible d’exécuter un fichier source Go sans le compiler, avec le shebang suivant, à placer à la première ligne du source :
//usr/bin/env go run $0 "$@" ; exit
Il faudra aussi rendre le fichier exécutable par la commande suivante :
$ chmod +x httpd.go
On pourra alors lancer le programme avec :
$ ./httpd.go
On peut alors écrire des scripts en Go. Voici comme exemple un serveur HTTP :
//usr/bin/env go run $0 "$@" ; exit
package main
import (
"flag"
"fmt"
"log"
"net/http"
)
func Log(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s %s", r.RemoteAddr, r.Method, r.URL)
handler.ServeHTTP(w, r)
})
}
func main() {
root := flag.String("r", ".", "Root directory to serve")
port := flag.Int("p", 8000, "Port the server is listening")
cert := flag.String("c", "", "Path of the server certificate file")
key := flag.String("k", "", "Path of the server key file")
flag.Parse()
addr := fmt.Sprintf(":%d", *port)
log.Printf("Starting server on port %d serving directory %s", *port, *root)
logHandler := Log(http.FileServer(http.Dir(*root)))
if *cert != "" && *key != "" {
log.Printf("Using certificate %s", *cert)
log.Printf("Using key %s", *key)
log.Fatal(http.ListenAndServeTLS(addr, *cert, *key, logHandler))
} else {
log.Fatal(http.ListenAndServe(addr, logHandler))
}
}
Enjoy!