En esta guía queremos mostrar algunos conceptos básicos que sean los que conduzcan a una calidad de código excelente. Ademas de respetar las normas de Go ya tiene incorporadas en sus herramientas como fmt o imports.
El objetivo es reducir discusiones técnicas basandose en esta guia como también la complejidad del código.
- Correr
goimports
. - Correr
golint
ygo vet
para el chequeo de errores.
Verificar las interfaces en tiempo de compilación.
Mal | Bien |
---|---|
type Handler struct {
// ...
}
func (h *Handler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
...
} |
type Handler struct {
// ...
}
var _ http.Handler = (*Handler)(nil)
func (h *Handler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
// ...
} |
var _ http.Handler = (*Handler)(nil)
debería fallar al compilar porque
*Handler
no cumple como una interfaz de http.Handler
.
El lado derecho de la asignacion debe ser el zero value de ese tipo. En este caso nil
para los punteros (like *Handler
), slices, mapas
y struct vacias para structs.
type LogHandler struct {
h http.Handler
log *zap.Logger
}
var _ http.Handler = LogHandler{}
func (h LogHandler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
// ...
}