Implementando indexación mediante Elastic Search
Clase 11 de 22 • Curso de Go Avanzado: Arquitectura de Eventos y CQRS
Contenido del curso
Clase 11 de 22 • Curso de Go Avanzado: Arquitectura de Eventos y CQRS
Contenido del curso
Agustin Caldart
Juan Diego Castellanos Jerez
Sergio Nicolas Silva Mendieta
Santiago Giraldo
Rafael Niquefa
go get github.com/elastic/go-elasticsearch/v7
Nueva versión !
go get github.com/elastic/go-elasticsearch/v8@latest
Por que no omitimos la funcion Close(), en la interface?
Se tiene que crear para poder indicar que la estructura ElasticSearchRepository hace parte de la interfas SearchRepository. Esa es la forma de hacer "herencia" No hay una variable que indique que esta heredando sino que la estructura debe de cumplir con ciertos criterios para poder ser considerada como herencia
Cómo dijo Santiago, la implementación concreta de el SearchRepository debe tener los tres metodos declarados en search/repository.go:
type SearchRepository interface { Close() IndexFeed(ctx context.Context, feed models.Feed) error SearchFeed(ctx context.Context, query string) ([]models.Feed, error) }
Si no implementamos esa función Close en elastic.go, creo que existe riesgo de error de Compilación Ya que ElasticSearchRepository no cumple completamente con la interfaz SearchRepository (porque le falta el método Close()), recibirás entonces un error de compilación si intentas asignar una instancia de ElasticSearchRepository a una variable del tipo SearchRepository (como la variable global repo).
Y si, hipotéticamente, el compilador Go no detectara esto y trataras de llamar a la función Close() del paquete, te encontrarías con un pánico en tiempo de ejecución debido a una desreferencia de un puntero nulo. Esto se debe a que el método Close() no existiría en ElasticSearchRepository, pero la función Close() del paquete aún intentaría llamar a repo.Close(), aunque no estoy 100% seguro de si esto último si podría llegar a pasar, es decir, si podríamos llegar a ejecutar el programa así.