tutorial

Cara Menginstall Plugin protoc-gen-go dan protoc-gen-go-grpc

Dalam dunia pengembangan aplikasi modern, terutama saat membangun layanan backend yang cepat dan efisien, gRPC menjadi pilihan utama. Namun, gRPC tidak bisa berdiri sendiri. Ia membutuhkan contract definition melalui Protocol Buffers (protobuf), dan lebih penting lagi, dibutuhkan plugin tambahan agar file .proto bisa diubah menjadi kode Go yang siap dipakai.

Dua plugin paling krusial untuk pengembang Go adalah:

  • protoc-gen-go
  • protoc-gen-go-grpc

Artikel ini akan mengupas tuntas: apa fungsi masing-masing, bagaimana cara menginstalnya dengan aman dan benar, serta tips untuk integrasi dengan proyek Go kamu.


Mengapa Plugin Ini Penting?

Saat kamu menulis file .proto, itu hanyalah blueprint. Untuk menjadikannya kode Go yang bisa kamu import, kamu harus mengubahnya menjadi file .pb.go menggunakan compiler protoc dan dua plugin berikut:

  • protoc-gen-go → Menghasilkan kode Go untuk tipe data (message)
  • protoc-gen-go-grpc → Menghasilkan kode Go untuk service gRPC (client dan server stub)

Tanpa kedua plugin ini, kamu tidak akan bisa menggunakan hasil serialisasi protobuf di dalam aplikasi Go.


Persiapan: Pastikan Go dan protoc Sudah Terpasang

Sebelum menginstal plugin, pastikan kamu sudah memiliki:

  1. Go (versi 1.20 atau lebih tinggi)
  2. Protocol Buffers Compiler (protoc)

Cek versi dengan:

go version
protoc --version

Jika protoc belum terpasang:

macOS:

brew install protobuf

Debian/Ubuntu:

sudo apt update
sudo apt install -y protobuf-compiler

Langkah Install Plugin

Go menyediakan cara sederhana untuk menginstal CLI tool via perintah go install.

1. Install protoc-gen-go

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

Plugin ini bertugas menghasilkan tipe data Go dari definisi message di .proto.

2. Install protoc-gen-go-grpc

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

Plugin ini akan menghasilkan interface untuk implementasi service client dan server di gRPC.


Menambahkan Plugin ke PATH

Secara default, tool hasil go install akan ditempatkan di $GOPATH/bin atau ${HOME}/go/bin. Supaya plugin dikenali oleh protoc, kamu harus menambahkan direktori ini ke dalam PATH.

Tambahkan ke .bashrc, .zshrc, atau .profile:

export PATH=""$PATH:$(go env GOPATH)/bin""

Kemudian jalankan:

source ~/.bashrc  # atau ~/.zshrc tergantung shell kamu

Verifikasi Instalasi

Cek apakah plugin tersedia:

which protoc-gen-go
which protoc-gen-go-grpc

Jika perintah di atas menampilkan path (misalnya /Users/kamu/go/bin/protoc-gen-go), maka plugin berhasil terinstal.


Contoh Penggunaan

Misalkan kamu punya file .proto di direktori proto/helloworld.proto, kamu bisa generate seperti ini:

protoc \
  --proto_path=proto \
  --go_out=api \
  --go-grpc_out=api \
  proto/helloworld.proto

Output akan menghasilkan dua file:

  • helloworld.pb.go → hasil dari protoc-gen-go
  • helloworld_grpc.pb.go → hasil dari protoc-gen-go-grpc

Kamu bisa langsung import dan gunakan file tersebut di dalam kode Go kamu.


Tips Produksi

Gunakan versi plugin yang eksplisit di CI/CD, agar build kamu stabil.

Misalnya:

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.4.0

Jangan commit file hasil generate ke repo, kecuali kamu benar-benar butuh untuk keperluan distribusi (misalnya library).

Gunakan Makefile atau script shell untuk automate generate file.

Contoh:

PROTO_DIR=proto
OUT_DIR=api

generate:
	protoc \
	  --proto_path=$(PROTO_DIR) \
	  --go_out=$(OUT_DIR) \
	  --go-grpc_out=$(OUT_DIR) \
	  $(PROTO_DIR)/*.proto

Penutup

Instalasi protoc-gen-go dan protoc-gen-go-grpc adalah langkah awal yang krusial dalam membangun layanan gRPC di Go. Meski terlihat teknis, hal ini akan menjadi rutinitas yang natural begitu kamu memahami alurnya.

Ingat, dengan setup yang benar sejak awal, kamu sedang membangun fondasi yang stabil dan scalable untuk aplikasi masa depan. Tidak hanya itu, kamu juga membuat timmu lebih produktif dan kodebase-mu lebih maintainable.

comments powered by Disqus