现代工具链集 lint、format、generate、依赖管理于一体Windows (PowerShell)# 使用 Scoop scoop install bufbuild/buf/buf # 或使用 Chocolatey choco install buf # 或手动下载 # https://github.com/bufbuild/buf/releasesMac/Linux# Homebrew brew install bufbuild/buf/buf # 或 curl 安装 curl -sSL https://github.com/bufbuild/buf/releases/latest/download/buf-$(uname -s)-$(uname -m) -o /usr/local/bin/buf chmod x /usr/local/bin/buf安装openapigo install github.com/google/gnostic/cmd/protoc-gen-openapilatest格式化buf format -w检查当前版本与上一个版本是否有破坏性变更buf breaking --against .git#branchmain代码生成buf generate# buf.gen.yaml version: v1 plugins: - plugin: go out: api - plugin: go-grpc out: api使用配置文件buf.gen.yaml 输出 代码怎么生成# 生成所有 proto默认读取 buf.gen.yaml buf generate # 只生成指定文件 buf generate api/outer/v1/hellow.proto # 指定配置文件 buf generate --template buf.gen.yaml # 组合使用 buf generate --template buf.gen.yaml api/outer/v1/hellow.protoversion: v1 plugins: - plugin: openapi out: . opt: - fq_schema_namingtrue - default_responsefalse使用配置文件(buf.work.yam 输入 proto 文件在哪)version: v1 directories: - api配置加载buf lint buf.work.yaml 、 buf.yaml buf generate buf.work.yaml 、 buf.gen.yaml buf build buf.work.yaml 、 buf.yaml显示指定# 指定工作区配置 buf lint --config ./path/to/buf.work.yaml # 指定生成配置 buf generate --template ./path/to/buf.gen.yamlbuf配置每个目录可以有独立的 buf.yaml 配置定义自己的 lint 规则version: v1 breaking: # 破坏性变更检测配置 use: - FILE # 使用 FILE 级别的破坏性变更检测 lint: use: - STANDARD # 使用 STANDARD 标准规则集规则集较严格 |MINIMAL 最宽松 except: # 排除以下规则不检查 - PACKAGE_VERSION_SUFFIX - SERVICE_SUFFIX - IMPORT_NO_PUBLIC - PACKAGE_DIRECTORY_MATCH - RPC_REQUEST_RESPONSE_UNIQUE - ENUM_VALUE_PREFIX - ENUM_ZERO_VALUE_SUFFIX - PACKAGE_SAME_JAVA_PACKAGE - RPC_RESPONSE_STANDARD_NAME - RPC_REQUEST_STANDARD_NAME ignore: [] # 忽略的文件/目录 ignore_only: {} # 针对特定规则忽略文件 allow_comment_ignores: true # 允许通过注释忽略 lint 检查 rpc_allow_same_request_response: false # 不允许请求和响应类型相同 rpc_allow_google_protobuf_empty_requests: false # 不允许使用 google.protobuf.Empty 作为请求 rpc_allow_google_protobuf_empty_responses: false FILE 文件级别 检测文件被删除等 PACKAGE 包级别 检测包内变更 WIRE_JSON Wire JSON 兼容性 更严格 WIRE Wire 二进制兼容性 最严格注释忽略示例syntax proto3; package api.outer.user.v1; // buf:lint:ignore SERVICE_SUFFIX service User { rpc GetUser(GetUserRequest) returns (GetUserResponse); } // buf:lint:ignore ENUM_VALUE_PREFIX enum Status { ACTIVE 0; // 不需要 STATUS_ACTIVE INACTIVE 1; }