Programo un servidor web muy sencillo que sirve archivos locales desde un directorio definido, este puede ser optimizado de varias maneras y mejorado para soportar SSL y otras funcionalidades, yo lo utilizo para probar aplicaciones WASM de forma local.

Código

package main
import (
"flag"
"fmt"
"log"
"net/http"
"os"
)
var (
serverHost = "" // interfaz de escucha = todas
serverPort = 8080 // puerto de escucha
publicDir = "www" // directorio público
)
func init() {
// obteniendo valores por parámetros de línea de comandos
serverPort = *flag.Int(
"p",
serverPort,
"Puerto de escucha",
)
publicDir = *flag.String(
"dir",
publicDir,
"directorio público",
)
flag.Parse()
// validando directorio
dir, err := os.Open(publicDir)
if err != nil {
log.Fatal(err)
}
defer dir.Close()
dirInfo, err := dir.Stat()
if err != nil {
log.Fatal(err)
}
if !dirInfo.IsDir() {
err := fmt.Errorf(
"\"%v\" no es un directorio",
publicDir,
)
flag.Usage()
log.Fatal(err)
}
}
func main() {
// publicando el contenido en raíz
http.Handle("/", http.FileServer(http.Dir(publicDir)))
serverAddress := fmt.Sprintf(
"%v:%v",
serverHost,
serverPort,
)
// iniciando servidor
for {
log.Printf(
"Iniciando servidor en %v",
serverAddress,
)
fmt.Print("\n -- Presione CTRL+C para terminar --\n")
err := http.ListenAndServe(
serverAddress,
nil,
)
// si falla imprime el error y reintenta
log.Printf(
"error ejecutando el servicio [%v], %v",
serverAddress,
err,
)
}
}
view raw main.go hosted with ❤ by GitHub