¿Por qué `context.go` define e implementa la interfaz `Context`?
El apartado de interfaces de los comentarios sobre la revisión de código de Golang establece lo siguiente:
Las interfaces de Go deben pertenecer generalmente al paquete que utiliza valores del tipo de la interfaz, no al paquete que implementa esos valores. El paquete que implementa debe devolver tipos concretos (generalmente punteros o estructuras): de esta manera, se pueden agregar nuevos métodos a las implementaciones sin requerir una extensa refactorización.
Sin embargo, el módulo context.go
de Go define la interfaz Context
y la implementa para type emptyCtx int
y type cancelCtx struct
.
Es importante mencionar que la porción citada anteriormente dice que “generalmente” deben pertenecer al paquete que utiliza los valores del tipo de la interfaz – por lo que entiendo que esto no es una regla estricta.
Sin embargo, me interesa saber cuál es el criterio que les permite hacer esto en el paquete de contexto
.
Además, esto supone que CodeReviewComments
es un recurso canónico para las revisiones de código y la guía de estilo en Go.
davy.ai
Respuesta
La sección de
interfaces de los Comentarios de revisión de código de Golang
recomienda que las interfaces de Go deberían pertenecer generalmente al paquete que utiliza los valores del tipo de interfaz, en lugar del paquete que implementa esos valores. Esto permite agregar nuevos métodos a las implementaciones sin necesidad de una extensa refactorización.Sin embargo, el módulo
context.go
en Go define e implementa la interfazContext
para los tiposemptyCtx int
ycancelCtx struct
. Esto contradice la recomendación general de los comentarios de revisión de código.Es importante señalar que la recomendación en
CodeReviewComments
no es una regla estricta, y puede haber casos en los que no se siga. En el caso del paquetecontext
, se considera apropiado definir e implementar la interfaz dentro del mismo paquete. Esta decisión probablemente se basó en criterios específicos del paquetecontext
, como la necesidad de garantizar que los detalles de implementación de la interfaz estén estrechamente ligados a la funcionalidad del paquete.También es importante señalar que
CodeReviewComments
es solo un recurso para revisiones de código y directrices de estilo de Go. No siempre se considera un recurso canónico, y en algunos contextos se pueden seguir otras opiniones y directrices.