当前位置: 首页 > wzjs >正文

重庆电子工程学院免费seo关键词优化方案

重庆电子工程学院,免费seo关键词优化方案,虚拟主机可以做视频视频网站吗,做网站哪个公司最以下是一个扩展后的脚本,支持生成 ​C、Go、Python、Java​ 的 Protobuf 和 gRPC 代码,并包含详细的使用说明及复杂依赖处理: 开放构建脚本源码 #!/bin/bash ### # Author : Zry && 978524088qq.com # Date : 2024-01…

以下是一个扩展后的脚本,支持生成 ​C++、Go、Python、Java​ 的 Protobuf 和 gRPC 代码,并包含详细的使用说明及复杂依赖处理:


开放构建脚本源码

#!/bin/bash
###
# @Author       : Zry && 978524088@qq.com
# @Date         : 2024-01-04 20:11:01
# @LastEditTime : 2024-01-18 16:30:00
# @FilePath     : /zry/proto/test.sh
# @Description  : 多语言 Protobuf 和 gRPC 代码生成脚本
# 
# Copyright (c) 2024 by 978524088@qq.com, All Rights Reserved. 
#### 默认参数
OUTDIR_PROTO="./gen"  # 默认输出目录
LANGUAGES="cpp"       # 默认生成 C++
PROTO_PATHS="proto"   # 默认 Proto 搜索路径
INPUT_FILES=""        # 输入的 Proto 文件或目录# 使用说明
usage() {echo "用法: $0 [选项] <输入文件或目录>"echo "选项:"echo "  -o, --outdir <目录>   输出目录 (默认: ./gen)"echo "  -l, --lang <语言>     生成的语言,逗号分隔 (支持: cpp, go, python, java) (默认: cpp)"echo "  -I, --proto_path <路径>  Proto 文件的搜索路径,逗号分隔 (默认: proto)"echo "  -h, --help           显示帮助信息"echo ""echo "示例:"echo "  # 生成所有语言的代码,指定输入文件和路径"echo "  $0 -l cpp,go,python,java -I proto,../common proto/example.proto"echo ""echo "  # 生成 Go 代码并指定输出目录"echo "  $0 -l go -o gen/go proto/**/*.proto"
}# 解析参数
while [[ "$#" -gt 0 ]]; docase $1 in-o|--outdir) OUTDIR_PROTO="$2"; shift ;;-l|--lang) LANGUAGES="$2"; shift ;;-I|--proto_path) PROTO_PATHS="$2"; shift ;;-h|--help) usage; exit 0 ;;*) INPUT_FILES="$INPUT_FILES $1" ;;esacshift
done# 检查输入文件
if [ -z "$INPUT_FILES" ]; thenecho "错误: 必须指定至少一个输入文件或目录!"usageexit 1
fi# 创建输出目录
mkdir -p "$OUTDIR_PROTO"# 构造 --proto_path 参数
PROTO_PATH_CMD=""
IFS=',' read -ra PATHS <<< "$PROTO_PATHS"
for path in "${PATHS[@]}"; doPROTO_PATH_CMD+=" --proto_path=$path"
done# 遍历每个语言生成代码
IFS=',' read -ra LANGS <<< "$LANGUAGES"
for lang in "${LANGS[@]}"; docase $lang incpp)# 生成 C++ 和 gRPC 代码echo "[+] 生成 C++ 代码到 $OUTDIR_PROTO/cpp"protoc $PROTO_PATH_CMD \--cpp_out="$OUTDIR_PROTO/cpp" \--grpc_out="$OUTDIR_PROTO/cpp" \--plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin \$INPUT_FILES;;go)# 生成 Go 和 gRPC 代码 (需安装 protoc-gen-go 和 protoc-gen-go-grpc)echo "[+] 生成 Go 代码到 $OUTDIR_PROTO/go"protoc $PROTO_PATH_CMD \--go_out="$OUTDIR_PROTO/go" \--go-grpc_out="$OUTDIR_PROTO/go" \$INPUT_FILES;;python)# 生成 Python 和 gRPC 代码echo "[+] 生成 Python 代码到 $OUTDIR_PROTO/python"protoc $PROTO_PATH_CMD \--python_out="$OUTDIR_PROTO/python" \--grpc_python_out="$OUTDIR_PROTO/python" \$INPUT_FILES# 修复 Python 包导入问题touch "$OUTDIR_PROTO/python/__init__.py";;java)# 生成 Java 和 gRPC 代码 (需安装 protoc-gen-grpc-java)echo "[+] 生成 Java 代码到 $OUTDIR_PROTO/java"protoc $PROTO_PATH_CMD \--java_out="$OUTDIR_PROTO/java" \--grpc-java_out="$OUTDIR_PROTO/java" \$INPUT_FILES;;*)echo "错误: 不支持的语言 '$lang'"exit 1;;esac
doneecho "生成完成! 输出目录: $OUTDIR_PROTO"

功能说明

  1. 多语言支持
    支持生成 ​C++、Go、Python、Java​ 的 Protobuf 和 gRPC 代码。

  2. 复杂依赖处理
    通过 -I 参数指定多个 Proto 文件搜索路径,解决嵌套依赖问题。例如:

    -I proto,../common  # 同时搜索 proto/ 和 ../common/
    
  3. 批量编译文件
    支持通配符 (*/**) 输入多个文件:

    proto/**/*.proto    # 编译 proto/ 下所有子目录的 .proto 文件
    
  4. 代码结构优化

    • Python​:自动生成 __init__.py 文件,避免包导入错误。
    • Go​:生成符合 Go 模块规范的代码结构。
  5. 环境依赖检查
    需提前安装语言对应的插件:

    # C++
    sudo apt install protobuf-compiler grpc-tools# Go
    go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest# Python
    pip install grpcio-tools# Java
    # 从 Maven 仓库下载 protoc-gen-grpc-java
    

使用示例

1. 生成所有语言代码
./test.sh -l cpp,go,python,java -o gen proto/**/*.proto
2. 仅生成 Go 代码
./test.sh -l go -o gen/go proto/example.proto
3. 处理多目录依赖

若你的 Proto 文件依赖外部目录(如 ../common):

./test.sh -l cpp -I proto,../common proto/service.proto

输出目录结构

gen/
├── cpp/          # C++ 代码
├── go/           # Go 代码
├── python/       # Python 代码
└── java/         # Java 代码

常见问题解决

1. 插件未安装错误

如果提示 protoc-gen-xxx not found,表示缺少对应语言插件,需按上述说明安装。

2. Python 导入错误

确保生成目录中有 __init__.py,脚本已自动创建该文件。

3. Go 包路径问题

.proto 文件中指定 Go 包路径:

option go_package = "github.com/yourname/project/gen/go";

通过此脚本,可一键生成多语言代码,适应复杂项目结构。

补充说明

以下是使用 Mermaid 格式绘制的两张图表,用于辅助说明脚本的使用流程和项目结构:


1. 项目目录结构图

graph TDA[项目根目录] --> B[proto/]A --> C[gen/]B --> D[common/]D --> D1[common.proto]D --> D2[error.proto]B --> E[positioning/]E --> E1[location.proto]E --> E2[gps.proto]C --> F[cpp/]F --> F1[common.pb.h]F --> F2[common.pb.cc]C --> G[go/]G --> G1[common.pb.go]G --> G2[location.pb.go]C --> H[python/]H --> H1[__init__.py]H --> H2[common_pb2.py]C --> I[java/]I --> I1[Common.java]I --> I2[Location.java]

说明​:

  • proto/ 目录存放原始的 .proto 文件(如 common.protolocation.proto)。
  • gen/ 目录是生成的代码输出目录,按语言分为子目录(如 cpp/go/)。
  • 每个语言子目录中包含生成的代码文件(如 .pb.cc 对应 C++,.pb.go 对应 Go)。

2. 脚本编译流程图

输入文件存在
输入文件不存在
C++
Go
Python
Java
启动脚本
解析参数
参数检查
设置输出目录和搜索路径
报错并退出
遍历所有指定语言
调用protoc生成C++代码
生成.pb.h/.pb.cc文件
调用protoc-gen-go生成Go代码
生成.pb.go文件
调用protoc生成Python代码
生成_pb2.py文件
创建__init__.py
调用protoc-gen-java生成Java代码
生成.java文件
完成
输出成功信息

说明​:

  1. 参数解析​:检查输入文件、输出目录(-o)、语言(-l)和搜索路径(-I)。
  2. 代码生成​:
    • C++​​:生成 .pb.h.pb.cc 文件。
    • Go​:通过 protoc-gen-go 生成 .pb.go 文件。
    • Python​:生成 _pb2.py 文件,并自动创建 __init__.py 解决包导入问题。
    • Java​:生成 .java 文件。
  3. 完成输出​:所有语言代码生成后,脚本提示成功信息。

使用场景示例

  • 生成 C++ 代码​:

    ./test.sh -l cpp -o gen proto/positioning/location.proto
    
  • 生成多语言代码​:

    ./test.sh -l cpp,go,python -I proto,../common proto/**/*.proto
    

这两张图表可以帮助用户直观理解脚本的目录结构和编译流程。

http://www.dtcms.com/wzjs/67668.html

相关文章:

  • 松原做公司网站搜索引擎大全网站
  • 专业网站设计制作价格千锋教育培训机构就业率
  • 上海网站建设的价格低2022最新时事新闻及点评
  • 网上书城网站开发说明书网络推广网络营销和网站推广的区别
  • 电子商务网站商品怎么来线上宣传渠道和宣传方式
  • 怎样做p2p网站百度账号
  • 社区网站建设网络推广员工作好做吗
  • 外国设计师素材网站百度云网页版登录入口
  • 济南专业做网站的公司产品推广软文500字
  • 公司想做个自己的网站怎么做舆情分析网站免费
  • 一个公司设计网站怎么做今日头条新闻视频
  • 企业手机网站建设策划方案成都疫情最新消息
  • 杭州网站优化外包国内永久免费云服务器
  • 口碑好的郑州网站建设友情链接如何添加
  • 北京大兴住房和城乡建设委员会网站搜索引擎营销简称seo
  • 阴阳师网站怎么做百度一下百度一下你知道
  • 营销策划公司简介网站优化排名方法
  • 微信公众号如何做网站产品设计公司
  • qq刷赞网站推广软件国内做网站的公司
  • 做网站先做首页企业域名查询
  • 做生鲜的网站网络平台推广运营公司
  • 美国一特级a做爰片免费网站 视频金华关键词优化平台
  • 网站建设文献综述范文外链图片
  • 手机网站模板用什么做百度官网认证价格
  • 如何设计一个购物网站怎么找网站
  • 中移建设招标网站太原互联网推广公司
  • 上海奉贤做网站阿里指数数据分析平台
  • 青海企业网站制作做谷歌推广比较好的公司
  • 做微商进哪个网站安全吗在线营销推广
  • 中学网站建设方案广点通投放平台