protobuf 初探

1:https://developers.google.com/protocol-buffers/docs/reference/php-generated  //proto php

2:https://developers.google.com/protocol-buffers/docs/reference/go-generated   //go

3:https://godoc.org/github.com/golang/protobuf/proto#pkg-constants                   // go package

4:https://developers.google.com/protocol-buffers/docs/reference/proto3-spec     //proto3语法

上述网址需翻墙~

 

syntax = "proto3";

message data {
    string username = 1;
    int64 password = 2;
    int32  sex = 3;
    string address = 4;
    bool is_check = 5;
}

message result {
    string message = 1;
    int32  code    = 2;
}

生成其他文件:

$ protoc -I ./ --php_out ./ first.proto

$ protoc -I ./ --go_out ./ first.proto

$ protoc -I ./ --c_out ./ first.proto

<?php

require_once "result.php";
require_once "data.php";

$param = [
    'username' => 'xxxoo',
    'password' => '123456',
    'sex' => '1',
    'address' => 'xxxxx地址',
    'is_check' => true,
    'message' => 'success',
    'code' => 200,
];

$data = achieveData($param);
$results = verify($data);
var_dump($results);
function achieveData($param) {
    $data = new data();
    $result = new result();

    //存取数据
    $data->setUsername($param['username']);
    $data->setPassword(md5($param['password']), true);
    $data->setSex($param['sex']);
    $data->setAddress($param['address']);
    $data->setIsCheck($param['is_check']);
    return $data->serializeToString();
    $result->setMessage($param['message']);
    $result->setCode($param['code']);
    $results = [
            'data' => $data->serializeToString(),
            'results' => $result->serializeToString()

    ];
    return $results;
}


function verify($param) {
    $data = new data();
    $result = new result();
    $data->parseFromString($param['data']);
    $result->parseFromString($param['results']);
    return $data->dump() . '\n' . $result->dump();
}

//go 

syntax = "proto3";
package expload;

message Single {
 string name = 1;
 int32 age = 2 ;
 int64 mobile = 3;
}
package main

import (
	pb "../expload"
	"fmt"
	"github.com/golang/protobuf/proto"
	"log"
)
func main() {
	data := &pb.Single {
		Name:string("hello "),
		Age:int32(13),
		Mobile:int64(17601261496),

	}
	//sha1加密
	res, err := proto.Marshal(data)
	if err != nil {
		log.Fatal("marshaling is err", err)
	}



	//数据解码
	enCode := &pb.Single{}

	err = proto.Unmarshal(res, enCode)

	if err != nil {
		log.Fatal("Unmarshaling is err", err)
	}
	if data.GetName() != enCode.GetName() {
		log.Fatal("data is not the same %q != %q", data.GetName(), enCode.GetName())
	}
	//解数据则可以用新对象去调用get则可以
	fmt.Println(enCode.GetName())
}

注意的是 二和三的语法不同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值