es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  

Answer

  1. Avatar for 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 interfaz Context para los tipos emptyCtx int y cancelCtx 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 paquete context, se considera apropiado definir e implementar la interfaz dentro del mismo paquete. Esta decisión probablemente se basó en criterios específicos del paquete context, 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.

Comments are closed.