¿Cómo generar un archivo proto para un proyecto en Go?
Para comenzar a desarrollar un proyecto en Go que utilice gRPC y Protocol Buffers, lo primero es crear un archivo .proto que definirá nuestras estructuras de datos. Vamos a describir paso a paso cómo crear este archivo y generar un paquete en Go a partir de él.
¿Qué es un archivo proto y cómo definir sus elementos?
Un archivo proto es fundamental en el desarrollo con Protocol Buffers, el cual permite definir las estructuras de datos que se van a intercambiar. A continuación se detalla cómo crear uno:
Crear la carpeta y el archivo proto:
Comienza creando una nueva carpeta llamada proto.
Dentro de esta carpeta crea un archivo llamado student.proto.
syntax="proto3";package student;messageStudent{int32 id =1;string nombre =2;int32 edad =3;}
Definiciones clave en proto:
syntax: Indica la sintaxis de Protocol Buffers a utilizar, en este caso proto3.
package: Define el paquete donde vivirán estas estructuras de datos (student en este caso).
message: Define una nueva estructura de datos, Student, con sus atributos.
¿Cómo compilar el archivo proto en un paquete de Go?
Una vez hayas definido tu archivo proto, necesites compilarlo para generar un paquete de Go. Antes de compilar, asegúrate de que estas dependencias están instaladas:
Protoc Gen Go: Generador para protobuffers en Go.
Protoc Gen Go gRPC: Necesario para gRPC.
¿Cuáles son los comandos para compilar .proto?
Con las dependencias instaladas, puedes proceder a compilar tu archivo proto:
--go_opt=paths=source_relative: Configuración de rutas para búsquedas relativas.
--go-grpc_out y --go-grpc_opt: Similar a lo anterior pero aplicado para gRPC.
¿Qué hacer después de compilar el archivo proto?
Al compilarlo, obtendrás automáticamente el paquete de Go correspondiente, incluyendo las estructuras de datos y métodos generados. Se recomienda no editar estos archivos generados a menos que tengas claridad total sobre las modificaciones necesarias.
Este proceso automatiza la creación de estructuras de datos en proyectos Go, eliminando la necesidad de definirlas manualmente y asegurando que sean consistentes con el modelo original.
¡Así podrás empezar a crear tus propios microservicios en Go utilizando gRPC y Protocol Buffers de manera eficiente! Ahora estás listo para explorar cómo los microservicios y gRPC pueden optimizar tus proyectos. ¡Sigue aprendiendo y descubre el potencial de este enfoque!
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
gRPC:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
Si tiene problemas relacionados al PATH. (Agustin Caldart lo mencionó en otro comentario),
protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go_out: protoc-gen-go: Plugin failed with status code 1.
No olvide actualizar su PATH para que el compilador protoc pueda encontrar los plugins.
$ export PATH="$PATH:$(go env GOPATH)/bin"
Me salvaste!.
En caso de no funcionar el comando protoc, para Windows. Esto lo solucione descargando directamente el ejecutable y configurándolo en el path y resetear la consola.
protoc-gen-go: invalid Go import path "curso-protobuff" for "proto/student.proto"
The import path must contain at least one period ('.') or forward slash ('/') character.
See https://protobuf.dev/reference/go/go-generated#package for more information.
--go_out: protoc-gen-go: Plugin failed with status code 1.
Es debido a la versión de protoc, solo actualicen en el archivo .proto esta linea.
option go_package ="./curso-protobuff;studentpb";
Por algún motivo necesita el "./".
Mac OS
% brew install protobuf
% protoc --version
Por si no les sirve el comando, incluso después de agregarlo al path, me sirvió hacer esto:
Obviamente cambien el nombre de "GOPATH" a la ruta o como tengan el path de go en su configuración
También para los siguientes capítulos del curso (Para generar los servicios) me tocó instalar varias dependencias más:
go get google.golang.org/grpc
go get google.golang.org/grpc/codes
go get google.golang.org/grpc/status
protoc : El término 'protoc' no se reconoce como nombre de un cmdlet, función, archivo de script o programa ejecutable. Compruebe si escribió
correctamente el nombre o, si incluyó una ruta de acceso, compruebe que dicha ruta es correcta e inténtelo de nuevo.
En línea: 1 Carácter: 1
Hola a alguien le ha pasado este error en Mac?
host23232:advanced-protobuffers-gRPC-golang diego$ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/student.proto
protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go_out: protoc-gen-go: Plugin failed with status code 1.
Probé la solución de Agustin Caldart cambiando la variables de entorno para el GOPATH y el PATH y no funcionó.
~/.bashrc
Alguna idea para solucionar este problema? Muchas gracias.
hola @DiegoAll pudiste solucionar ese error con Mac?
En mi Mac para no mover configuraciones previas ya que lo estoy aprendiendo lo uso así export PATH="$PATH:$(go env GOPATH)/bin"
### Prerequisitos
- go: -
- protoc: -
### Instructiones
go version
go mod init pdaniel.com/go/grpc
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
protoc --go\_out=.--go\_opt=paths=source\_relative --go-grpc\_out=.--go-grpc\_opt=paths=source\_relative proto/student.proto