Sweetohm

Michel Casabianca

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!