proto 文件仓库。
city.person
: 智能体city.comm
: 通信city.config
: 配置文件基本组件city.elec
: 电网city.event
: 城市事件city.geo
: 坐标体系city.map
: 地图city.routing
: 路径规划city.social
: 社交city.streetview
: 街景city.sync
: 全局同步器city.traffic
: 交通city.traffic_light
: 信控city.trip
: 出行与日程city.water
: 水网
以buf作为 linter,按 buf 的要求作为标准。
另外,为避免二义性,所有不在完全相同命名空间下的跨文件引用均需要写出完成包名。
在相同命名空间下的,不要引入包名(主要是针对xxx.proto
与xxx_service.proto
)。
参考:
- https://developers.google.com/protocol-buffers/docs/style
- https://github.com/uber/prototool/blob/dev/style/README.md
关于 enum: prefer uber 的 style
- 独立定义 enum,不嵌入 message
- enum 的 item 名称加 enum name 作为前缀
- 所有浮点数采用 double 精度。
- .proto 中不包含任何
option
,需要指定option
的目标语言采用buf managed mode进行管理。 - 采用聚合性质的 message 作为 mongodb collection 的语义表示,并便于开发 Golang 的数据读取代理。
完全支持通过 Golang struct tag 机制实现 bson
到 pb
的快速转换,并删去不能在 bson
中体现的语义:
- 所有的
oneof
由 optional 替代,oneof
的功能依靠约定实现。- 原因:struct tag 无法正确处理
oneof
,bson
无法体现oneof
语义,oneof
语义实际作用价值不大,目前主要体现在map_position
与departure
中。
- 原因:struct tag 无法正确处理
- 所有的
float
替换为double
。- 原因:
bson
中没有float32
,python
没有float32
,C++
在 64 位 CPU 上采用float32
与float64
计算速度相同。
- 原因:
- 所有的
uint32
替换为int32
。- 原因:
bson
中没有uint
,python
没有uint
,同时简化C++
与go
代码编写(统一用int32
)。
- 原因:
- 枚举在
bson
中存储由字符串替换为整数。- struct tag 无法正确处理字符串形式的枚举。
- 丰富
bson
中的 external 数据项,解决关联到原始数据的问题。
完成git仓库修改后,执行以下命令:
git tag v${major}.${minor}.${patch} # 例如 v0.1.0,设置版本号
git push --tags # 推送版本号
go get -u git.fiblab.net/sim/protos@v${major}.${minor}.${patch}
pip install pycityproto
安装 grpcio 的过程中,如果出现
pip install fails with "No such file or directory: 'c++': 'c++'"
代表缺少 C++相关依赖。在 Debian 镜像上,执行:
sudo apt install build-essential
在 alpine 镜像上,执行:
apk add g++
使用npm install
命令安装SDK:
npm install @fiblab/cityproto
使用yarn add
命令安装SDK:
yarn add @fiblab/cityproto