Mejores Prácticas para Genéricos
Nomenclatura, diseño de restricciones y adopción gradual en bases de código.
Busca en todas las páginas de la documentación
Nomenclatura, diseño de restricciones y adopción gradual en bases de código.
Estas reglas mantienen el código genérico legible en las revisiones, estable para los llamadores y alineado con los patrones de la biblioteca estándar.
type NodeID interface { ~int64 } es mejor que repetir listas de uniones.cmp.Ordered y comparable sobre uniones copiadas. Mantente alineado con la semántica de la biblioteca estándar.~T cuando los tipos nombrados deban coincidir. Los envoltorios estilo Celsius/Fahrenheit pertenecen al conjunto de tipos.T, K, V) o nombres de dominio (ID, E). Evita abreviaturas lindas de varias letras en APIs públicas.internal/, manejadores simples fuera. Coincide con el diseño de servicio de chi / gin / echo.slices, maps y cmp antes que copias personalizadas. Mantén menos código, obtén actualizaciones en tiempo de ejecución.maps.Clone alias los valores de puntero.comparable para conjuntos y deduplicación basados en claves de mapa. No simular claves de slice.int, string, struct). Una función de prueba por comportamiento, varios argumentos de tipo.go test -race en contenedores genéricos utilizados desde goroutines. Las reglas de mutex no cambian.Example* sobre prosa de comentarios largos. El compilador verifica los ejemplos.Más de dos o tres en un símbolo exportado merece escrutinio.
Componer tipos ayudantes en su lugar.
Los subtests con múltiples instanciaciones están bien.
No genéricizar envoltorios de testify/assert sin valor.
El significado de la restricción, la línea de instanciación de ejemplo y la nota de rendimiento si no es obvia.
Mantener los tipos de API generados concretos.
Usar genéricos solo en paquetes de utilidad escritos a mano.
Cuando la biblioteca estándar agrega una función equivalente o solo queda una instanciación.
El código concreto más simple gana.
Los alias no crean nuevas definiciones genéricas.
Definir tipos genéricos en tipos de struct/mapa nombrados.
Raramente en cadenas exportadas.
Los ayudantes de claves de metadatos internos pueden usar genéricos con claves comparable.
Trátalos como roturas de API: busca en el repositorio las instanciaciones y ejecuta la matriz de compilación completa de CI.
Los analizadores staticcheck y unused de golangci-lint detectan instanciaciones muertas.
Emparejar con el trabajo de CI compile-all-variants para bibliotecas.
Sí, si las exportaciones se mantienen pequeñas y las restricciones están nombradas.
Los paquetes públicos excesivamente genéricos dificultan la incorporación: sigue la sección B.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado de Green Tea GC, go fix modernizers - verificar parche en la compilación), chi (última - verificar en la compilación), gin (última - verificar en la compilación), echo (última - verificar en la compilación), google.golang.org/grpc (última - verificar en la compilación), sigs.k8s.io/controller-runtime (última - verificar en la compilación), kubebuilder (última - verificar en la compilación), tinygo (última - verificar objetivos de placa en la compilación), wazero (última - verificar en la compilación) y golangci-lint (última - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 19 jul 2026