Después de 6 años trabajando como programador en varios lenguajes de programación, comienzo a notar algunas cosas que extraño de otros lenguajes en Go. Por ejemplo, la falta de generadores de código que simplifiquen el proceso de desarrollo. Esta fue mi motivación para crear go-katana, una extensión con fragmentos de código que te ayudarán a acelerar tu desarrollo.
Go-katana es una extensión sencilla donde recopilo fragmentos de código de cosas que suelo construir a diario en mis proyectos de Go, como Repositorios, Servicios, Objetos de Valor, Entidades de Dominio, Puertos, etc.
Actualmente, Go-katana cuenta con solo 4 fragmentos de código que nos ayudarán en la programación en Go. Sin embargo, ya tenemos planificado en el roadmap del proyecto agregar más de 10 fragmentos de código adicionales y un generador de código más avanzado que nos permitirá construir paquetes completos de Go con tan solo un comando.
El primer fragmento de código se invoca con la palabra clave:
entity
Este generará una estructura de Go que llevará el mismo nombre que nuestro archivo pero capitalizado, si es una sola palabra, y si son varias palabras, las separará con "_" como es la convención en Go utilizando "Pascal Case".
Nombre del archivo: admin_params.go -> AdminParams
El nombre del paquete viene de la carpeta donde esta el archivo
Y el código que generaría sería el siguiente:
./modelspackage models type AdminParams struct { field string } func NewAdminParams(field string) *AdminParams { return &AdminParams{ //Add properties field: field, } } func (a *AdminParams) Validate() error { //TODO: Implement return nil }
Para este fragmento de código no hay mucha ciencia creará una interfaz usando el nombre de tu archivo y usando de nombre de paquete el nombre de tu carpeta.
Usaremos el comando:
port
Nos generará el siguiente código.
./portspackage ports type UserApplication interface{}
Para lograr esto, agregaremos un constructor en forma de estructura que también pueda devolver un error, y una línea adicional para validar la interfaz. Lamentablemente, no he podido lograr que la importación sea dinámica debido a las limitaciones de los fragmentos de código en VSCode (no hay una forma de obtener el nombre del módulo automáticamente), por lo que tendremos que agregarlo manualmente.
Usaremos el comando:
impl
Nos generará el siguiente código.
./applicationpackage application import ( ports ~/Development/work/bayonet/go-auth/application ) type UserApplication struct { field string } // Validate the interface it's completed in the struct var _ ports.UserApplication = (*UserApplication)(nil) func NewUserApplication(field string) (*UserApplication, error) { return &UserApplication{ //Add properties field: field, },nil }
También podemos generar objetos valor con el siguiente comando:
vo
Nos generará el siguiente código.
./applicationpackage models type Email struct { value string } func NewEmail(value string) Email { return Email{ value: value, } } func (e Email) Equals(other Email) bool { return e.value == other.value } func (e Email) Validate() error { //TODO: Implement return nil }
Actualmente, go-katana se encuentra en su primera versión. Sin embargo, ya tenemos planificado el roadmap a seguir y el futuro del proyecto es convertirse en un generador de proyectos que se pueda instalar como una extensión, brindándonos soporte a lo largo de todo el ciclo de desarrollo.
Espero que les sea de ayuda. Aquí les dejo el enlace a la extensión:
go-katana: puedes ir más rápidoEsta se mantendrá gratuita de por vida para los usuarios que la instalen desde ahora en su fase inicial.