Sollte ich ServeMux oder http direkt in Golang verwenden

8

Ich habe mich gefragt, ob ich einen neuen ServeMux erstellen und ihn in http.Server registrieren soll oder ob ich http.HandleFunc und http.Handler direkt aufrufen soll?

Ich denke, die Route mit einem ServeMux ist besser, weil http.HandleFunc offensichtlich mit dem globalen Status des HTTP-Pakets kollidiert, was in Go als schlechte Übung angesehen wird. In vielen Tutorials, sogar den offiziellen, sehe ich oft die http.HandleFunc route verwendet.

Das fragt mich: Warum sollte man http.HandleFunc verwenden, wenn es ein ServeMux gibt? Ich weiß, dass ServeMux einige Vorteile hat (zB Sie können es verschachteln, ohne das Präfix ständig zu wiederholen), aber ich frage mich, warum ich jemals http.HandleFunc over Multiplexer wählen sollte, insbesondere da HandleFunc intern ServeMux verwendet.

Bearbeiten: Wie in den Kommentaren versprochen, habe ich gebeten, die zusätzlichen (und nutzlosen IMO-Funktionen) unter Golang-dev und sie sagten nein (na ja, bei Person nein). Hier ist der Link.

    
Matt3o12 27.03.2016, 15:12
quelle

1 Antwort

5

Sie sind auf dem richtigen Weg: Sie sollten Ihre eigene ServeMux aus den angegebenen Gründen instanziieren.

Die Verwendung von DefaultServeMux birgt auch das Risiko, dass Profiling-Endpunkte bei der Verwendung von net/http/pprof offengelegt werden, da dies der Fall ist sind an den DefaultServeMux angehängt.

http.Handle|HandleFunc sind Convenience-Methoden und möglicherweise nützlich, um den Textbaustein im Beispielcode zu behalten, aber beim Erstellen eines ServeMux können Sie ihn umbrechen, in einen anderen verschachteln, aus einem Konstruktor exportieren usw.

>     
elithrar 27.03.2016, 15:24
quelle

Tags und Links