„Bevorzugen Zusammensetzung Vererbung "- Gang of 4
Vererbung wurde in erster Linie nicht in Golang entwickelt. ;)
Wenn Sie ausführliche Erläuterungen zu den warum Teil suchen, ich glaubte, dies auf SO beantwortet wurde, daher möchte ich darauf Sie nur daran: Embedding instead of inheritance in Go.
Nun, können Sie tatsächlich das gleiche Ergebnis mit Muster Adapter Entwurf erzielen, die Sie Funktionalität von einer eingebauten Bibliothek erweitern ermöglicht, und mir seinen Weg flexibler als Vererbung.
func adapter(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.Header().Set("Server", SERVER_NAME)
h.ServeHTTP(w, r)
})
}
oder Pass in serverName
als Parameter:
func adapter(h http.Handler, serverName string) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.Header().Set("Server", serverName)
h.ServeHTTP(w, r)
})
}
Schließlich haben Sie die Flexibilität zu wählen, welche Handler (n) zur 'geerbt':
http.Handle("/path", adapter(your_handler))
Oder wenn es für jeden Handler gemeint ist, erben Sie einfach den root-Handler:
http.ListenAndServe(port, adapter(root_Handler))
Weiterführende Literatur: https://justinas.org/writing-http-middleware-in-go/ – elithrar
Vielen Dank – Gon