ProtoBuf练习

环境设置

项目地址

https://github.com/silvermagic/ProtoBufDev.git

操作系统

64位 Fedora 24

安装protobuf

$ git clone https://github.com/google/protobuf.git
$ cd protobuf/
$ ./autogen.sh
$ ./configure
$ make -j8
$ sudo make install
### 设置pkg-config查找路径
$ tail -n 8 .bash_profile

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH

LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH
$ source ~/.bash_profile
工程目录结构(模板)
$ ls
build  CMakeLists.txt  proto  reader.cpp  README.txt  writer.cpp
$ cat CMakeLists.txt
#cmake的最低版本
cmake_minimum_required(VERSION 2.8)

#工程名
project(protobuf)

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

#遍历当前目录及子目录获取所有源文件
file(GLOB SRC "${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
file(GLOB WSRC "${CMAKE_CURRENT_SOURCE_DIR}/writer.cpp")
file(GLOB RSRC "${CMAKE_CURRENT_SOURCE_DIR}/reader.cpp")

#设置源文件列表
add_executable(writer ${WSRC} ${SRC})
add_executable(reader ${RSRC} ${SRC})

#dependencies
INCLUDE(FindPkgConfig)
#使用pkg-config寻找protobuf库的include目录以及库
pkg_check_modules(PROTOBUF REQUIRED protobuf)
include_directories(${PROTOBUF_INCLUDE_DIRS})
link_directories(${PROTOBUF_LIBRARY_DIRS})
#设置链接库
target_link_libraries(writer ${PROTOBUF_LIBRARIES})
target_link_libraries(reader ${PROTOBUF_LIBRARIES})

#新增自定义命令pb和cls
add_custom_target(pb
    COMMAND protoc -I=${CMAKE_CURRENT_SOURCE_DIR}/proto --cpp_out=${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto
)
add_custom_target(cls
    COMMAND rm -rf ${CMAKE_CURRENT_SOURCE_DIR}/*.pb.*
)
编译运行项目(模板)
$ mkdir build
$ cd build
$ cmake ..
$ make clean
$ make cls
$ make pb
$ make
$ ./writer
$ ./reader
规范

proto文件名使用小写字母加下划线的组合方式

转载于:https://www.cnblogs.com/silvermagic/p/9087602.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!如果您想练习使用 Go 与 Protocol Buffers(简称 Protobuf)进行开发,我可以给您一些建议和示例。 首先,确保您已经安装了 Go 编程语言和 Protocol Buffers 工具。然后,您可以按照以下步骤进行练习: 1. 定义消息格式:创建一个 `.proto` 文件来定义您的消息格式。例如,假设您要创建一个简单的用户信息消息,可以创建一个名为 `user.proto` 的文件,并编写以下内容: ```protobuf syntax = "proto3"; package user; message User { string name = 1; int32 age = 2; } ``` 2. 生成代码:使用 `protoc` 工具将 `.proto` 文件编译为 Go 代码。在终端中运行以下命令: ```shell protoc --go_out=. user.proto ``` 这将在当前目录下生成一个 `user.pb.go` 的文件,其中包含了生成的 Go 结构体和相关方法。 3. 使用生成的代码:在您的 Go 代码中导入生成的文件并使用其中定义的结构体和方法。例如,您可以编写以下代码来创建一个新用户并将其序列化为字节流: ```go package main import ( "fmt" "log" "github.com/your-module-path/user" "google.golang.org/protobuf/proto" ) func main() { newUser := &user.User{ Name: "Alice", Age: 30, } data, err := proto.Marshal(newUser) if err != nil { log.Fatal(err) } fmt.Println(data) } ``` 以上代码导入了 `user.pb.go` 文件,并创建了一个名为 `newUser` 的用户对象。然后,使用 `proto.Marshal` 方法将其序列化为字节流,并打印输出。 这只是 Protobuf 的基本用法示例,您还可以使用更多功能,如嵌套消息、枚举类型、自定义选项等。请查阅 Protobuf 官方文档以获取更多详细信息和示例:https://developers.google.com/protocol-buffers/docs/gotutorial 祝您练习愉快!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值