45 lines
1.2 KiB
Markdown
45 lines
1.2 KiB
Markdown
|
|
## Example usage
|
|
I use a script, which by default, assumes that your protobuf files are in relative path `./protocol`, and will generate a folder for outputs in `./genproto`:
|
|
```sh
|
|
#!/bin/bash -eu
|
|
|
|
PATH=$PATH:$(go env GOPATH)/bin
|
|
|
|
# Default values
|
|
protodir="./protocol"
|
|
outdir="./genproto"
|
|
|
|
# Parse command-line options
|
|
while getopts "p:o:" opt; do
|
|
case $opt in
|
|
p) protodir="$OPTARG" ;;
|
|
o) outdir="$OPTARG" ;;
|
|
\?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
# Print the directories for verification
|
|
echo "Proto directory: $protodir"
|
|
echo "Output directory: $outdir"
|
|
|
|
rm -rf $outdir
|
|
mkdir -p $outdir
|
|
|
|
# use the public image from dockerhub which contains tools for protoc & golang/grpc
|
|
docker run --rm \
|
|
-v "$protodir/":/protocol \
|
|
-v "$outdir":/genproto \
|
|
--workdir / \
|
|
talksik/golang-protoc:latest \
|
|
protoc --proto_path=./protocol \
|
|
--go_out=./genproto \
|
|
--go_opt=paths=source_relative \
|
|
--go-grpc_out=./genproto \
|
|
--go-grpc_opt=paths=source_relative \
|
|
$(find ./protocol -name "*.proto")
|
|
```
|
|
|
|
## Docker hub
|
|
You'll notice that we use this image `talksik/golang-protoc:latest` which is in [docker hub publicly available](https://hub.docker.com/layers/talksik/golang-protoc).
|