proposal: use Go 1.27 generic methods for typed Context helpers (PathParam/QueryParam/FormParam/Bind)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- go
- Área
- backend-api-design
Línea de trabajo
Revisa primero el conjunto existente de helpers tipados de v4 y la v5 Context API. Confirma la versión mínima de Go necesaria para los métodos genéricos y determina cómo deberían coexistir los métodos Context propuestos y los helpers existentes a nivel de paquete. El trabajo estará terminado cuando el conjunto de helpers, el comportamiento de compatibilidad y el requisito de versión de Go estén acordados y cubiertos por las pruebas del proyecto.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Go 1.27 has been released with support for generic methods (release notes, proposal golang/go#77273). This removes the language limitation mentioned in #2856 — "structs can not have generic methods, only generic functions are allowed" — that forced the typed helpers in v4 to be package-level functions like echo.PathParam[int](c, "id").
Now that v5's Context is a struct and the language supports it, the helpers can become real methods:
Before (v4 style):
id, err := echo.PathParam[int](c, "id")
page, err := echo.QueryParam[int](c, "page")
After (generic methods):
id, err := c.PathParam[int]("id")
page, err := c.QueryParam[int]("page")
Suggested additions (mirroring the v4 helper set):
func (c *Context) PathParam[T any](name string) (T, error)
func (c *Context) QueryParam[T any](name string) (T, error)
func (c *Context) FormParam[T any](name string) (T, error)
func (c *Context) PathParamOr[T any](name string, def T) (T, error)
func (c *Context) QueryParamOr[T any](name string, def T) (T, error)
func (c *Context) FormParamOr[T any](name string, def T) (T, error)
func (c *Context) QueryParams[T any](name string) ([]T, error)
func (c *Context) FormParams[T any](name string) ([]T, error)
Note: since Context is no longer an interface in v5, adding methods is not a breaking change for users — existing code calling c.PathParam("id") keeps compiling, and the existing package-level generic functions can be kept (or deprecated) as thin wrappers.
The only blocker is the minimum Go version: generic methods require go 1.27 in go.mod. Filing this now so it's on the radar for when Echo bumps its minimum supported Go version to 1.27.
- Lenguaje dominante
- Go
- Estrellas
- 32.7k
- Forks
- 2.8k
- Merge medio
- 9 h 39 min
- PR fusionados (30 d)
- 6
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de labstack/echo
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
-
format tag conflicts with swag Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 74/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Todos los issues de labstack/echo
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
crossplane/crossplane#7859 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
bazel-contrib/rules_go#4721 · 2 comentarios ·
-
needs-triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
bug carvel-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
carvel-dev/kapp-controller#1861 ·
-
area/logging kind/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100