Skip to content
The Go language implementation of gRPC. HTTP/2 based RPC
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github internal: clean up README (#2764) Apr 11, 2019
Documentation doc: fixing link in keepalive docs (#2755) Apr 9, 2019
balancer client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
benchmark A few more improvements to the benchmark code. (#2840) Jun 10, 2019
binarylog/grpc_binarylog_v1 binarylog: implement methodlogger (#2334) Oct 19, 2018
channelz internal: update channelz.pb.go (#2871) Jun 18, 2019
codes docs: add note about retrying UNAVAILABLE (#2774) Apr 15, 2019
connectivity fix: typos (#2591) Jan 23, 2019
credentials Update go.mod for golang/x/tools and staticcheck (#2832) May 24, 2019
encoding encoding: check whether encoding.Name() is empty before calling strin… Mar 22, 2019
examples examples: note about ALTS special access permission on GCP (#2846) Jun 20, 2019
grpclog Downgrade grpclb package info logs to V(2). (#2710) Mar 22, 2019
health client: addrConn NewStream and health check cleanup (#2848) Jun 26, 2019
internal client: fix canceled vs deadline exceeded double-check logic (#2906) Jul 16, 2019
interop credentials/alts: Add example of authz in ALTS (#2814) May 16, 2019
keepalive keepalive: apply minimum ping time of 10s to client and 1s to server (#… Feb 21, 2019
metadata cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
naming Update go.mod for golang/x/tools and staticcheck (#2832) May 24, 2019
peer cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
reflection client: deprecates FailFast & replaces its use by WaitForReady. Dec 13, 2018
resolver balancer/resolver: add loadBalancingConfig and pre-parsing support (#… May 30, 2019
serviceconfig serviceconfig: mark new package experimental (#2852) Jun 6, 2019
stats stats: add Trailer to client-side stats.End (#2639) Mar 13, 2019
status Remove call to proto.Clone() in http2Server.WriteStatus. (#2842) Jun 10, 2019
stress client: deprecates FailFast & replaces its use by WaitForReady. Dec 13, 2018
tap cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
test server: immediately close all connections created after GracefulStop (#… Jul 12, 2019
testdata testdata: get test assets related to package root instead of GOPATH (#… Aug 22, 2018
.travis.yml travis: run most test environments on Go 1.12 instead of 1.11 (#2847) Jun 4, 2019
AUTHORS add AUTHORS and LICENSE Jun 8, 2017
CONTRIBUTING.md internal: clean up README (#2764) Apr 11, 2019
LICENSE Make Apache 2.0 LICENSE file a verbatim copy (#1329) Jun 21, 2017
Makefile makefile: remove testappengine from make all (#2621) Feb 7, 2019
README.md internal: clean up README (#2764) Apr 11, 2019
backoff.go fix: typos (#2591) Jan 23, 2019
balancer.go docs: clarify "deprecated" to indicate whether some features may be r… Jul 11, 2019
balancer_conn_wrappers.go balancer/resolver: add loadBalancingConfig and pre-parsing support (#… May 30, 2019
balancer_switching_test.go balancer/resolver: add loadBalancingConfig and pre-parsing support (#… May 30, 2019
balancer_test.go client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
balancer_v1_wrapper.go balancer: provide parsed target through BuildOptions (#2803) May 9, 2019
call.go fix: typos (#2591) Jan 23, 2019
call_test.go interceptor: new APIs for chaining client interceptors. (#2696) Apr 15, 2019
clientconn.go client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
clientconn_state_transition_test.go client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
clientconn_test.go client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
codec.go encoding: Introduce new method for registering and choosing codecs (#… Jan 23, 2018
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 client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
doc.go Fix missing and wrong license (#1422) Aug 4, 2017
go.mod Update go.mod for golang/x/tools and staticcheck (#2832) May 24, 2019
go.sum Update go.mod for golang/x/tools and staticcheck (#2832) May 24, 2019
grpc_test.go test: disable leakcheck after the first failure (#2563) Jan 14, 2019
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 client: return helpful error message when wait-for-ready RPCs fail wi… Apr 29, 2019
picker_wrapper_test.go Fix error formatting based on best practices from Code Review Comments ( Feb 7, 2019
pickfirst.go cleanup: replace "x/net/context" import with "context" (#2439) Nov 12, 2018
pickfirst_test.go client: remove option to send RPCs before HTTP/2 handshake is complet… Jul 12, 2019
preloader.go Mark PreparedMsg as EXPERIMENTAL (#2783) Apr 22, 2019
proxy.go proxy: support basic authentication (#2426) Nov 13, 2018
proxy_test.go cleanup: use time.Until(t) instead of t.Sub(time.Now) (#2571) Jan 16, 2019
resolver_conn_wrapper.go balancer/resolver: add loadBalancingConfig and pre-parsing support (#… May 30, 2019
resolver_conn_wrapper_test.go grpctest: add new package to manage tests and support per-test setup/… Jan 7, 2019
rpc_util.go grpc: implementation of PreparedMsg API Apr 19, 2019
rpc_util_test.go Remove call to proto.Clone() in http2Server.WriteStatus. (#2842) Jun 10, 2019
server.go server: immediately close all connections created after GracefulStop (#… Jul 12, 2019
server_test.go grpctest: add new package to manage tests and support per-test setup/… Jan 7, 2019
service_config.go balancer/resolver: add loadBalancingConfig and pre-parsing support (#… May 30, 2019
service_config_test.go balancer/resolver: add loadBalancingConfig and pre-parsing support (#… May 30, 2019
stream.go client: addrConn NewStream and health check cleanup (#2848) Jun 26, 2019
trace.go client: restore remote address in traces (#2718) Mar 27, 2019
version.go Change version to 1.23.0-dev (#2893) Jul 3, 2019
vet.sh docs: clarify "deprecated" to indicate whether some features may be r… Jul 11, 2019

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 requires Go 1.9 or later.

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

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

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.