먼저 이동을 설치 : 말, 바이두, 또는 내 참조 주시기하지 https://blog.csdn.net/u013755520/article/details/89031598는 끝으로 이동을 설치 한;
설치 가서 내를 참조 인터페이스를 호출 protobuf : https://blog.csdn.net/u013755520/article/details/91375830 ;
protobuf 효과 직렬화 된 오브젝트는 [] 바이트가된다 : 타입 OBJ {} 다양한 속성을 이러한 목적은 임의의 타입 일 수있다;
유사 : https://blog.csdn.net/u013755520/article/details/90546726 이진 패킷은 [] 바이트 {UINT32 UINT32 []} 바이트 물체 오브젝트의 기본 형태가된다;
protobuf 및 bianry 패킷은 인코딩의 범위에 속한다.
1.protobuf 문법
1.1 메시지 유형
1.2 데이터 형식
2. 사용 protobuf
아래 / 이러한 프로토 같은 디렉토리 xx.proto 파일 작성을위한 신택스에 따라 2.1
syntax = "proto3";
package pb;
message Person {
string name = 1;
int32 age = 2;
repeated string emails = 3;
repeated string phones = 4;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
2.2 컴파일러 : 프로토 / 디렉토리에 CD를, 다음 명령을 실행
protoc --go_out =. / * .proto
goland에 왜 각 구조에 이동이 파일이 proto.Message 인터페이스를 달성했지만, 나도 몰라, 그것은 xx.pd.go 파일을 생성 xx.proto 현재 디렉토리에있는 파일에 따르면, 현재 디렉토리에있을 것입니다 당신은 실제로 제안되지 않는다? ? ? 공부하기
프로그램 2.3 xx.pb.go 파일
즉 우수한 광장 pb.go 구조에서와 같이, 직접적 일 수 있고, 직접 프로그램에서는, 관통 proto.Marshal [] 바이트로 변환되는 OBJ pb.go;
반대로, 직접 프로그램 proto.Unmashal의 pb.go의 OBJ으로 입을 수있다 [] 바이트로 변환되고
package main
import (
"fmt"
"github.com/micro/protobuf/proto"
pb "rpc/proto"
)
func main(){
person := &pb.Person{
Name:"yz",
Age:11,
Emails:[]string{"[email protected]","[email protected]"},
Phones:[]*pb.PhoneNumber{
&pb.PhoneNumber{
Number:"123456",
Type:pb.PhoneType_HOME,
},
&pb.PhoneNumber{
Number:"123456",
Type:pb.PhoneType_MOBILE,
},
&pb.PhoneNumber{
Number:"123456",
Type:pb.PhoneType_WORK,
},
},
}
//marshal: obj---[]byte
data,err := proto.Marshal(person)
if err != nil {
fmt.Println(err)
}
//unmarshal : []byte---obj
newPersonObj := &pb.Person{}
err = proto.Unmarshal(data,newPersonObj)
if err != nil {
fmt.Println(err)
}
fmt.Println(newPersonObj)
}