Skip to content
The Go language implementation of gRPC. HTTP/2 based RPC
Go Other
  1. Go 99.4%
  2. Other 0.6%
Branch: master
Clone or download

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github github: make stalebot monitor PRs, too (#3202) Nov 21, 2019
Documentation Fix wording in keep alive documentation (#3625) May 18, 2020
attributes Pass weights to wrr balancer through attributes. (#3530) Apr 28, 2020
backoff client: add WithConnectParams to configure connection backoff and tim… Oct 3, 2019
balancer retry: prevent per-RPC creds error from being transparently retried (#… Jun 11, 2020
benchmark protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
binarylog/grpc_binarylog_v1 all: refactor .pb.go generation (#3451) Apr 24, 2020
channelz protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
cmd/protoc-gen-go-grpc protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
codes Modified tests to use tlogger. (#3343) Feb 6, 2020
connectivity fix: typos (#2591) Jan 23, 2019
credentials alts: Added peer attributes accessor for alts context and updated tes… Jun 17, 2020
encoding Modified tests to use tlogger. (#3343) Feb 6, 2020
examples protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
grpclog channelz: log on channelz trace events and trace on channelz relevant… Feb 14, 2020
health protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
internal retry: re-enable retrying on non-IO transport errors (#3691) Jun 16, 2020
interop protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
keepalive keepalive: apply minimum ping time of 10s to client and 1s to server (#… Feb 21, 2019
metadata Modified tests to use tlogger. (#3343) Feb 6, 2020
peer cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
profiling protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
reflection protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
resolver grpclb, dns: pass balancer addresses via resolver.State (#3614) May 26, 2020
security/advancedtls advancedtls: check error before deferring close (#3659) Jun 5, 2020
serviceconfig resolver: add State fields to support error handling (#2951) Oct 4, 2019
stats protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
status status: move statusError to internal/status package (#3432) Apr 6, 2020
stress protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
tap cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
test retry: prevent per-RPC creds error from being transparently retried (#… Jun 11, 2020
testdata Update test credentials to 2048-bit RSA keys (#3467) Mar 23, 2020
xds xds: use google default creds (#3673) Jun 11, 2020
.travis.yml internal: revert change to make travis always build proto (#3580) Apr 29, 2020
AUTHORS add AUTHORS and LICENSE Jun 8, 2017
CODE-OF-CONDUCT.md Update governance, contributing, code of conduct docs (#3033) Sep 23, 2019
CONTRIBUTING.md Update governance, contributing, code of conduct docs (#3033) Sep 23, 2019
GOVERNANCE.md Update governance, contributing, code of conduct docs (#3033) Sep 23, 2019
LICENSE Make Apache 2.0 LICENSE file a verbatim copy (#1329) Jun 21, 2017
MAINTAINERS.md change from Inc. to LLC for Google (#2997) Aug 26, 2019
Makefile advancedtls: fix internal tests (#3322) Jan 15, 2020
README.md doc: fix quickstart hyperlink in README (#3648) May 28, 2020
backoff.go client: add WithConnectParams to configure connection backoff and tim… Oct 3, 2019
balancer_conn_wrappers.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
balancer_conn_wrappers_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
balancer_switching_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
call.go fix: typos (#2591) Jan 23, 2019
call_test.go Revert "profiling: add hooks within grpc (#3159)" (#3378) Feb 14, 2020
clientconn.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
clientconn_state_transition_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
clientconn_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
codec.go revert buffer reuse (#3338) Jan 27, 2020
codec_test.go grpctest: add new package to manage tests and support per-test setup/… Jan 7, 2019
codegen.sh FIX: use /usr/bin/env bash in shebang Dec 17, 2016
dialoptions.go internal: fix typos (#3581) May 20, 2020
doc.go all: refactor .pb.go generation (#3451) Apr 24, 2020
go.mod examples: add go.mod to make examples a separate module (#3546) Apr 21, 2020
go.sum doc: update README for supported Go versions and travis for tests (#3516 Apr 10, 2020
grpc_test.go Modified tests to use tlogger. (#3343) Feb 6, 2020
install_gae.sh testing: upgrade appengine sdk to version 1.9.68 (#2311) Sep 18, 2018
interceptor.go cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
picker_wrapper.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
picker_wrapper_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
pickfirst.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
pickfirst_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
preloader.go Revert "profiling: add hooks within grpc (#3159)" (#3378) Feb 14, 2020
proxy.go proxy: support basic authentication (#2426) Nov 13, 2018
proxy_test.go proxy_test: Fix a goroutine-leak bug in testHTTPConnect: now use chan… Oct 9, 2019
regenerate.sh protoc-gen-go-grpc: add requirement of embedding UnimplementedServer … Jun 4, 2020
resolver_conn_wrapper.go channelz: log on channelz trace events and trace on channelz relevant… Feb 14, 2020
resolver_conn_wrapper_test.go balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020
rpc_util.go stream: fix calloption.After() race in finish (#3672) Jun 11, 2020
rpc_util_test.go Revert "profiling: add hooks within grpc (#3159)" (#3378) Feb 14, 2020
server.go internal: fix typos (#3581) May 20, 2020
server_test.go grpctest: add new package to manage tests and support per-test setup/… Jan 7, 2019
service_config.go xds: handle weighted cluster as route action (#3613) May 26, 2020
service_config_test.go resolver: add State fields to support error handling (#2951) Oct 4, 2019
stream.go retry: re-enable retrying on non-IO transport errors (#3691) Jun 16, 2020
trace.go trace: fix getting family for the method (#3216) Dec 19, 2019
trace_test.go trace: fix getting family for the method (#3216) Dec 19, 2019
version.go Change version to 1.31.0-dev (#3681) Jun 11, 2020
vet.sh balancer: move Balancer and Picker to V2; delete legacy API (#3431) Apr 28, 2020

README.md

gRPC-Go

Build Status GoDoc GoReportCard

The Go implementation of gRPC: A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. For more information see the gRPC Quick Start: Go guide.

Installation

To install this package, you need to install Go and setup your Go workspace on your computer. The simplest way to install the library is to run:

$ go get -u google.golang.org/grpc

With Go module support (Go 1.11+), simply import "google.golang.org/grpc" in your source code and go [build|run|test] will automatically download the necessary dependencies (Go modules ref).

If you are trying to access grpc-go from within China, please see the FAQ below.

Prerequisites

gRPC-Go officially supports the three latest major releases of Go.

Documentation

Performance

Performance benchmark data for grpc-go and other languages is maintained in this dashboard.

Status

General Availability Google Cloud Platform Launch Stages.

FAQ

I/O Timeout Errors

The golang.org domain may be blocked from some countries. go get usually produces an error like the following when this happens:

$ go get -u google.golang.org/grpc
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

To build Go code, there are several options:

  • Set up a VPN and access google.golang.org through that.

  • Without Go module support: git clone the repo manually:

    git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
    

    You will need to do the same for all of grpc's dependencies in golang.org, e.g. golang.org/x/net.

  • With Go module support: it is possible to use the replace feature of go mod to create aliases for golang.org packages. In your project's directory:

    go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest
    go mod tidy
    go mod vendor
    go build -mod=vendor
    

    Again, this will need to be done for all transitive dependencies hosted on golang.org as well. Please refer to this issue in the golang repo regarding this concern.

Compiling error, undefined: grpc.SupportPackageIsVersion

If you are using Go modules:

Please ensure your gRPC-Go version is required at the appropriate version in the same module containing the generated .pb.go files. For example, SupportPackageIsVersion6 needs v1.27.0, so in your go.mod file:

module <your module name>

require (
    google.golang.org/grpc v1.27.0
)
If you are not using Go modules:

Please update proto package, gRPC package and rebuild the proto files:

  • go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
  • go get -u google.golang.org/grpc
  • protoc --go_out=plugins=grpc:. *.proto

How to turn on logging

The default logger is controlled by the environment variables. Turn everything on by setting:

GRPC_GO_LOG_VERBOSITY_LEVEL=99 GRPC_GO_LOG_SEVERITY_LEVEL=info

The RPC failed with error "code = Unavailable desc = transport is closing"

This error means the connection the RPC is using was closed, and there are many possible reasons, including:

  1. mis-configured transport credentials, connection failed on handshaking
  2. bytes disrupted, possibly by a proxy in between
  3. server shutdown
  4. Keepalive parameters caused connection shutdown, for example if you have configured your server to terminate connections regularly to trigger DNS lookups. If this is the case, you may want to increase your MaxConnectionAgeGrace, to allow longer RPC calls to finish.

It can be tricky to debug this because the error happens on the client side but the root cause of the connection being closed is on the server side. Turn on logging on both client and server, and see if there are any transport errors.

You can’t perform that action at this time.