第三节——pcbook项目建立

Posted 想学习安全的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三节——pcbook项目建立相关的知识,希望对你有一定的参考价值。

第三章——定义pcbook项目中的protobuf 消息并生成 Go 代码

3.1、安装 vscode 插件

  1. 市场搜索ext:proto,安装插件vscode-proto3
  2. 新建项目,命令:mkdir -p pcbook/proto
  3. 在proto目录下创建proto文件,命令:touch processor_message.proto
  4. 设置proto3插件
    • file->Preferences->settings->proto3->Edit in settings.jons
    • 输入

    "protoc": 
    
        "path": "/usr/local/bin/protoc",
        "options": [
            "--proto_path=proto",
        ]
    

  1. 安装clang-format插件,vscode安装好后,执行命令:sudo apt-get install clang-format

3.2、定义 protobuf 消息

  1. 定义一个名为CPU的message消息
    • 字符串类型的品牌(brand)与名称(name)
    • 无符号32为整型的内核(number_cores)与线程(number_threads)
    • double类型的最小(min_ghz)和最大频率(max_ghz)
syntax = "proto3";

option go_package="../pb;pb";

message CPU 
  string brand = 1;
  string name = 2;
  uint32 number_cores = 3;
  uint32 number_threads = 4;
  double min_ghz = 5;
  double max_ghz = 6;

3.3、生成go代码

  1. 使用命令:go mod init pcbook创建go.mod文件
  2. 使用命令获取grpc包,命令:go get -u google.golang.org/grpc
  3. 创建pb文件夹
  4. 在工程目录下使用命令:protoc --proto_path=proto --go_out=pb --go-grpc_out=pb proto/*.proto生成pb文件
  5. 创建Makefile文件用于执行便捷化命令
gen:
	protoc --proto_path=proto --go_out=pb --go-grpc_out=pb proto/*.proto

clean:
	rm pb/*.go

3.4、定义其它类型的proto文件

3.4.1、定义GPU消息

  1. 字符串类型的品牌(brand)与名称(name)

  2. double类型的最小(min_ghz)和最大频率(max_ghz)

message GPU 
  string brand = 1;
  string name = 2;
  double min_ghz = 3;
  double max_ghz = 4;

3.4.2、定义Memory消息

  1. 在proto文件夹中创建memory_message.proto文件

  2. 在Memory消息类型中定义一个枚举类型,从 BIT 到 TERABYTE

  3. 定义Memory消息的属性:一个用于值,另一个用于单位

message Memory 
  enum Unit 
    UNKNOWN = 0;
    BIT = 1;
    BYTE = 2;
    KILOBYTE = 3;
    MEGABYTE = 4;
    GIGABYTE = 5;
    TERABYTE = 6;
  

  uint64 value = 1;
  Unit unit = 2;

  1. 在GPU消息中引用Memory类型

    • 使用import引入memory_message.proto文件

    • 在GPU消息中使用Memory类型

syntax = "proto3";

option go_package="../pb;pb";

import "memory_message.proto";

message CPU 
  string brand = 1;
  string name = 2;
  uint32 number_cores = 3;
  uint32 number_threads = 4;
  double min_ghz = 5;
  double max_ghz = 6;


message GPU 
  string brand = 1;
  string name = 2;
  double min_ghz = 3;
  double max_ghz = 4;
  Memory memory =5;

3.4.3、定义存储消息

  1. 创建文件storage_message.proto
  2. 用Driver定义两个枚举——HDD与SSD
  3. 在存储消息中添加 2 个字段:驱动程序类型和内存大小(引入memory包)
syntax = "proto3";

option go_package="../pb;pb";

import "memory_message.proto";

message Storage 
    enum Driver 
      UNKNOWN = 0;
      HDD = 1;
      SSD = 2;
    
  
    Driver driver = 1;
    Memory memory = 2;
  

3.4.4、定义键盘消息

  1. 新建一个proto文件——keyboard_message.proto
  2. 定义一个Keyboard消息
  3. 消息里定义一个Layout枚举类,具有 QWERTY、QWERTZ 或 AZERTY 布局
  4. 定义bool类型的backlit,用于表示键盘是否背光

3.4.5、定义屏幕消息

  1. 新建一个proto文件——screen_message.proto
  2. 定义一个Screen消息
  3. 在Screen消息体里嵌套一个Resolution消息体用于指明分辨率
    • 定义unint32类型的width与height
  4. 在Screen消息体里定义一个面板材料(Panel)枚举类型——IPS与OLED
  5. 定义Screen消息体的属性
    • float size_inch 大小(单位:英寸)
    • Resolution resolution 分辨率
    • Panel panel 面板材料
    • bool multitouch 是否是触屏
message Screen
    message Resolution
        uint32 width=1;
        uint32 height=2;
    
    enum Panel
        UNKNOW=0;
        IPS=1;
        OLED=2;
    
    float size_inch=1;
    Resolution resolution=2;
    Panel panel=3;
    bool multitouch=4;

3.4.6、定义笔记本电脑消息

  1. 创建proto文件——laptop_message.proto
  2. 定义字符型id,brand,name;CPU cpu;memory ram;
  3. 一台笔记本电脑可以有多个 GPU,所以我们使用repeated关键字告诉 protoc 这是一个 GPU 列表
  4. 储存也是多个,也使用关键字repeated定义
  5. 再定义屏幕与键盘
  6. 用double定义重量,但这里允许使用公斤与磅两个单位,所以使用oneof定义weigth
  7. 再添加 2 个字段:美元价格(double price_usd)和笔记本电脑的发布年份(uint32 release_year)
syntax="proto3";

option go_package="../pb;pb";

import "processor_message.proto";
import "memory_message.proto";
import "storage_message.proto";
import "screen_message.proto";
import "keyboard_message.proto";

message Laptop
    string id=1;
    string brand=2;
    string name=3;
    CPU cpu=4;
    Memory memory=5;
    repeated GPU gpu=6;
    repeated Storage storage=7;
    Screen screen=8;
    Keyboard keyboard=9;
    oneof weight
        double weight_kg=10;
        double weight_lb=11;
    
    double price_usd = 12;
    uint32 release_year = 13;

以上是关于第三节——pcbook项目建立的主要内容,如果未能解决你的问题,请参考以下文章

第三节——pcbook项目建立

面向对象分析-第三节:面向对象分析之建立动态模型和功能模型

(王道408考研数据结构)第二章线性表-第三节1:单链表的定义及其操作(插入和删除,建立之尾插和头插)

信息系统项目管理师第三节课重点

第三节:SpringBoot中web项目推荐目录结构

(计算机组成原理)第五章中央处理器-第三节2:CPU专用数据通路