Hiện tại thì mình thấy 1 số product họ sẽ endcode Json Data sang Binary Data xong gửi đi,
và họ dụng proto buf để support cho việc endcode.
1) Setup gRPC + Golang environment.
Đầu tiên bạn cần setup môi trường:
Dưới này là slide:
https://docs.google.com/presentation/d/19zCPlujW2NIvUzG5NZFKqCIJmfyINoTasNtpsFSiQKo/edit#slide=id.p
2) Coding
2.1) Create proto file.
mình tạo file message.proto
syntax = "proto3"; package nim; option go_package="./nim-proto"; message YourMessage { string example_field = 1; int32 another_field = 2; // Add other fields as needed }
Sau đó mình chạy lệnh:
protoc --go_out=. message.proto go get -u google.golang.org/protobuf/cmd/protoc-gen-go protoc --go_out=. message.proto
Lúc này nó sẽ tạo ra file:
Bạn tạo 1 file main.go
package main import ( "fmt" "google.golang.org/protobuf/proto" "log" "proto-binary-msg/nim-proto" // replace with actual path ) func main() { // Create an original message with a larger field value msg := &nim_proto.YourMessage{ ExampleField: "This is a longer string that will make the original message larger", AnotherField: 123, } // Serialize to binary binaryData, err := proto.Marshal(msg) if err != nil { log.Fatalf("Failed to encode message: %v", err) } // Calculate the size of the original message originalMessageSize := proto.Size(msg) fmt.Printf("Original Message: %+v\n", msg) fmt.Println("Size of Original Message: ", originalMessageSize) // Print the binary data (as a byte slice) fmt.Println("Binary Data: ", binaryData) binaryDataSize := len(binaryData) fmt.Println("Size of Binary Data: ", binaryDataSize) // Check if binary data size is smaller than original message size if binaryDataSize < originalMessageSize { fmt.Println("Binary Data is smaller than Original Message") } else if binaryDataSize > originalMessageSize { fmt.Println("Binary Data is larger than Original Message") } else { fmt.Println("Binary Data size is equal to Original Message size") } // Prepare a buffer for the decoded data msgDecoded := &nim_proto.YourMessage{} // Unmarshal the binary data into the protobuf message struct err = proto.Unmarshal(binaryData, msgDecoded) if err != nil { log.Fatalf("Failed to decode message: %v", err) } // Print the decoded message fmt.Printf("Decoded Message: %+v\n", msgDecoded) }
Và đây là result của