grpc/grpc-go

GitHub: grpc/grpc-go

gRPC 的官方 Go 语言实现,提供基于 HTTP/2 和 Protobuf 的高性能 RPC 通信能力。

Stars: 22828 | Forks: 4646

# gRPC-Go [![GoDoc](https://pkg.go.dev/badge/google.golang.org/grpc)][API] [![GoReportCard](https://goreportcard.com/badge/grpc/grpc-go)](https://goreportcard.com/report/github.com/grpc/grpc-go) [![codecov](https://codecov.io/gh/grpc/grpc-go/graph/badge.svg)](https://codecov.io/gh/grpc/grpc-go) [gRPC][] 的 [Go][] 实现:一个高性能、开源、通用的 RPC 框架,优先支持移动平台和 HTTP/2。欲了解更多信息,请参阅 [Go gRPC docs][],或直接进入 [quick start][]。 ## 前置条件 - **[Go][]**:**两个最新主要** [版本][go-releases] 中的任意一个。 ## 安装 只需在代码中添加以下导入语句,然后 `go [build|run|test]` 将自动获取必要的依赖项: ``` import "google.golang.org/grpc" ``` ## 了解更多 - [Go gRPC docs][],其中包括 [quick start][] 和 [API reference][API] 以及其他资源 - 来自本仓库的 [底层技术文档](Documentation) - [性能基准测试][Performance benchmark] - [示例](examples) - [贡献指南](CONTRIBUTING.md) ## 常见问题 ### I/O 超时错误 某些国家/地区可能无法访问 `golang.org` 域名。当发生这种情况时,`go get` 通常会产生如下错误: ``` $ 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) ``` 要构建 Go 代码,有几种选择: - 设置 VPN,通过它访问 google.golang.org。 - 在支持 Go module 的情况下:可以使用 `go mod` 的 `replace` 功能为 golang.org 包创建别名。在你项目的目录下执行: go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest go mod tidy go mod vendor go build -mod=vendor 同样,对于托管在 golang.org 上的所有传递依赖项,也需要这样做。有关详细信息,请参阅 [golang/go issue #28652](https://github.com/golang/go/issues/28652)。 ### 编译错误,undefined: grpc.SupportPackageIsVersion 请使用 `go get google.golang.org/grpc` 更新到 gRPC-Go 的最新版本。 ### 如何开启日志 默认 logger 由环境变量控制。像这样开启所有日志: ``` $ export GRPC_GO_LOG_VERBOSITY_LEVEL=99 $ export GRPC_GO_LOG_SEVERITY_LEVEL=info ``` ### RPC 失败并显示错误 `"code = Unavailable desc = transport is closing"` 此错误意味着 RPC 使用的连接已关闭,可能的原因有很多,包括: 1. 传输凭据 配置错误,握手失败 2. 字节被干扰,可能是中间的代理造成的 3. 服务器关闭 4. Keepalive 参数导致连接关闭,例如,如果您将服务器配置为定期终止连接以 [触发 DNS 查找](https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779)。 如果是这种情况,您可能需要增加 [MaxConnectionAgeGrace](https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters),以允许更长的 RPC 调用完成。 调试此问题可能比较棘手,因为错误发生在客户端,但连接关闭的根本原因在服务器端。请开启 __客户端和服务器__ 的日志,看看是否存在任何传输错误。
标签:EVTX分析, Go, Golang, gRPC, HTTP/2, Python工具, RPC框架, Ruby工具, 中间件, 安全编程, 客户端, 序列化, 开发库, 开源库, 搜索引擎爬虫, 日志审计, 服务端, 系统底层, 网络编程, 谷歌, 跨语言, 远程过程调用, 通信协议