Includi il file js nel modello Go

Ho iniziato a studiare Go di recente. Ho preso un esempio come app web. Io ho:

/* tick-tock.go */ package main import ( "fmt" "io/ioutil" "log" "net/http" ) // Content for the main html page.. var page = `     div { font-family: "Times New Roman", Georgia, Serif; font-size: 1em; width: 13.3em; padding: 8px 8px; border: 2px solid #2B1B17; color: #2B1B17; text-shadow: 1px 1px #E5E4E2; background: #FFFFFF; }    

Go Timer

var myDelay; $(document).ready(function () { $("#output").append("Waiting for system time.."); myDelay = setInterval("delayedPost()", 1000); }); function delayedPost() { $.post("http://localhost:9999/dev", "", function(data, status) { //$("#output").empty(); $("#output").prepend(data); }); $.post("http://localhost:9999/v1", "", function(data, status) { //$("#output").empty(); $("#v1").prepend(data); }); $.post("http://localhost:9999/v2", "", function(data, status) { //$("#output").empty(); $("#v2").prepend(data); }); } function delayedPost1() { $.post("http://localhost:9999/dev", "", function(data, status) { $("#output").prepend(data); }); $.post("http://localhost:9999/v1", "", function(data, status) { $("#v1").prepend(data); }); $.post("http://localhost:9999/v3", "", function(data, status) { $("#v2").prepend(data); }); } function changeUrl() { alert('salom'); clearInterval(myDelay); } ` // handler for the main page. func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, page) } // handler to cater AJAX requests func handlerDevs(w http.ResponseWriter, r *http.Request) { //fmt.Fprint(w, time.Now().Format("Mon, 02 Jan 2006 15:04:05 MST")) fmt.Fprint(w, "Dev1
") } func handlerV1(w http.ResponseWriter, r *http.Request) { //fmt.Fprint(w, time.Now().Format("Mon, 02 Jan 2006 15:04:05 MST")) fmt.Fprint(w, "Vertical1
") } func handlerV2(w http.ResponseWriter, r *http.Request) { //fmt.Fprint(w, time.Now().Format("Mon, 02 Jan 2006 15:04:05 MST")) fmt.Fprint(w, "Vertical2
") } func main() { http.HandleFunc("/", handler) http.HandleFunc("/dev", handlerDevs) http.HandleFunc("/v1", handlerV1) http.HandleFunc("/v2", handlerV2) log.Fatal(http.ListenAndServe(":9999", nil)) http.HandleFunc("/jquery.min.js", SendJqueryJs) panic(http.ListenAndServe(":8081", nil)) } func SendJqueryJs(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadFile("jquery.min.js") if err != nil { http.Error(w, "Couldn't read file", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/javascript") w.Write(data) }

Non ho potuto caricare jquery.min.js locale. Quando ho scritto src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" è stato caricato. Come posso caricare il file js locale? Non sono bravo a programmare in Go e non ho scritto codice completo. Quindi, per favore, prova a spiegare molto semplice. Grazie in anticipo!

    Hai bisogno di un Handler o di un HandlerFunc che invierà il contenuto del file ( jquery.min.js ) al browser web quando richiesto.

    Hai 3 opzioni:

    Farlo manualmente

    Questa è la soluzione più complessa. Sembrerebbe che nella funzione del gestore tu legga il contenuto del file, imposti il ​​tipo di contenuto di risposta appropriato ( application/javascript ) e invii il contenuto (che è un []byte ) alla risposta.

    Cose da tenere in considerazione: durante la lettura del file, è necessario specificare un percorso assoluto. Se si specifica un percorso relativo, assicurarsi che il file si trovi nella cartella corrente (directory di lavoro) dalla quale si avvia l’app.

    Esempio:

     func SendJqueryJs(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadFile("jquery.min.js") if err != nil { http.Error(w, "Couldn't read file", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/javascript; charset=utf-8") w.Write(data) } func main() { http.HandleFunc("/jquery.min.js", SendJqueryJs) panic(http.ListenAndServe(":8081", nil)) } 

    L’esempio sopra è in grado di servire solo un file: jquery.min.js per la richiesta:

     http://localhost:8081/jquery.min.js 

    Utilizzo di http.ServeFile()

    Questo è molto più semplice: la funzione http.ServeFile() è in grado di inviare il contenuto di un file alla risposta specificata. Hai ancora bisogno di creare una funzione o un gestore per usarlo, ma fa il resto per te:

     func SendJqueryJs(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "jquery.min.js") } 

    Utilizzo di http.FileServer()

    Se hai bisogno di servire più file statici, è qui che la funzione FileServer() è a portata di mano e ti restituisce un Handler che serve automaticamente i file dal tuo file system locale che sono i discendenti della cartella radice specificata.

    Questa soluzione è molto più flessibile: può inviare molti file di più tipi, rileva e imposta automaticamente il tipo di contenuto. Il gestore è anche in grado di visualizzare pagine HTML per elencare il contenuto della directory con collegamenti ai file e alle cartelle padre / figlio.

    Esempio:

     http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp")))) 

    Questo registrerà un Handler all’URL /tmpfiles/ che serve i file trovati nel tuo filesystem locale nella cartella /tmp . Quindi, ad esempio il seguente link :

      

    /tmp/jsquery.min.js file /tmp/jsquery.min.js dal server.

    Dai un'occhiata a questa risposta che spiega come utilizzare / triggersre un file server statico .