2016-04-28 20 views
5

Qual è la differenza tra questo:Differenza tra http e servemux predefinito?

func main() { 

    http.HandleFunc("/page2", Page2) 
    http.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", nil) 
} 

E utilizzando il golang servono mux

func main() { 
    mux := http.NewServeMux() 

    mux.HandleFunc("/page2", Page2) 
    mux.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", mux) 
} 

risposta

2

ServerMux è un tipo che implementa l'interfaccia Handler, tutti i server hanno uno. Nel tuo primo esempio il server usa solo il gestore predefinito. Non penso ci siano differenze qui perché il mux restituito da NewServeMux sarà uguale al valore predefinito. È reso disponibile in modo da poter personalizzare ulteriormente la gestione delle richieste.

2

predefinito mux è definita come:

var DefaultServeMux = NewServeMux() 

Quindi non c'è in realtà alcuna differenza principale, a meno che non si desidera personalizzare ulteriormente e bisogno di un mux esplicita per che (per esempio li a catena per qualche motivo).

Ma poiché il valore predefinito è già allocato, non è necessario crearne un altro senza motivo.

8

Il primo programma utilizza default serve mux. E 'identico a quello più dettagliato:

func main() { 
    http.DefaultServeMux.HandleFunc("/page2", Page2) 
    http.DefaultServeMux.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", http.DefaultServeMux) 
} 

C'è una differenza importante tra i due programmi: Il primo programma non ha il controllo completo sui gestori utilizzati nel programma. Ci sono pacchetti che si registrano automaticamente con il servizio mux predefinito dalle funzioni init() (example). Se il programma importa uno di questi pacchetti direttamente o indirettamente, i gestori registrati da questi gestori saranno attivi nel primo programma.

Il secondo programma ha il controllo completo sui gestori utilizzati con il server. Tutti i gestori registrati con il servizio di default mux vengono ignorati.