On Job Training (Learn) : Golang - Introduce to gRPC and gRPC Gateway
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
ajikamaludin 43e4268265
update readme
2 years ago
api/v1/health grpc basic done 2 years ago
configs setup config file 2 years ago
pkg/v1 grpc basic done 2 years ago
proto setup config file 2 years ago
router grpc basic done 2 years ago
README.md update readme 2 years ago
config.yaml setup config file 2 years ago
go.mod grpc basic done 2 years ago
go.sum grpc basic done 2 years ago
main.go grpc basic done 2 years ago

README.md

GO GRPC BASIC

Requirements

check other branch to step by step create project

Validate Go Installation

$ go version
go version go1.18.3 linux/amd64

Validate GOPATH

echo $GOPATH

Start Project in Go

cd $GOPATH/src
mkdir -p github.com/ajikamaludin/go-grpc_basic 
cd github.com/ajikamaludin/go-grpc_basic 
go mod init github.com/ajikamaludin/go-grpc_basic
go mod tidy

Install Protoc

Linux : Download zip file, extract zip file to ~/.local/, add PATH ~/.local/bin please read documentation from this link for more detail information

https://grpc.io/docs/protoc-installation/

Validate Protoc Installation

$ protoc --version
libprotoc 3.21.2

Install Protoc Dependecy for Golang

# protoc-gen-go
go install github.com/golang/protobuf/protoc-gen-go@latest
# proto (optional, execute in project dir)
go get google.golang.org/protobuf/proto@latest
# protoc-gen-grpc-gateway
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@latest
# protoc-gen-swagger
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@latest

Add PATH

add to your ~/.bashrc or ~/.zshrc file

export PATH="$PATH:$GOPATH/bin"

Validate Protoc Dependency Golang Installation

~  ls $GOPATH/bin                                             
dlv         gopls    protoc-gen-go       protoc-gen-grpc-gateway  revel
go-outline  grpcurl  protoc-gen-go-grpc  protoc-gen-swagger

Start Project

Setup Project

  • create proto dir
  • create versioning dir and service dir health
  • create proto file health.proto
  • compile / generate proto with compile-proto.sh in proto dir

Setup config file

  • create config.yaml
  • create pkg dir , create versioning dir and create configs dir
  • go get gopkg.in/yaml.v2 , is a lib for parsing yaml config file to struct
  • create config.go file, implement New and other func
  • create configs dir on root project , create configs.go, this is file that bundle or wrap any services or packages
  • go get github.com/sirupsen/logrus, is a lib to show log on run
  • implement New to configs.go file
  • create main.go, implement to call config and log environtment read is ready
  • test go run .

Implement Server GRPC

  • create utils/constants dir in pkg/v1, to create global constants, implement EnvProduction, Successcode, SuccessDesc
  • implement grpc service create api/v1/health service, create health.go as server service
  • create api/v1/health/status.go as method implment from protobuf / pb file
  • create router dir in root project
  • create grpc.go in router dir and implement NewGRPCServer and register health api service
  • go get github.com/soheilhy/cmux, TODO: what is for ?
  • create router.go in router dir and implement IgnoreErr, this is for ignore error so can be safely ignore
  • go get golang.org/x/sync/errgroup, TODO: what is for ?
  • implement main.go to create grpc server from grpc.go with errgroup handler
  • go run ., run server grpc
  • go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest, this tool is
  • test grpcurl -plaintext localhost:5566 list, to show list name of services
  • test grpcurl -plaintext localhost:5566 list api.gogrpc.v1.health.HealthService, to show list name of service methods
  • test grpcurl -plaintext localhost:5566 api.gogrpc.v1.health.HealthService.Status, to test method call in grpc
  • result
{
    "success": true,
    "code": "0000",
    "desc": "SUCCESS"
}
  • or test via postman , new -> grpc request -> Enter Server Url : localhost:5566 -> Import proto file / Select Method : Status -> Click Invoke