Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

[Golang/Protocol Buffers] Binarilize data by Proto Buf

Posted on December 5, 2023December 5, 2023 By nim No Comments on [Golang/Protocol Buffers] Binarilize data by Proto Buf

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.

Contents

Toggle
  • 1) Setup gRPC + Golang environment.
  • 2) Coding
  • 2.1) Create proto file.

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

Golang

Post navigation

Previous Post: [Helm] Fail when running helm upgrade
Next Post: [Monitoring] Understanding Different Types of Metrics in Monitoring Systems: Gauge, Counter, Histogram, and Summary

More Related Articles

[Golang] Looking filepath.Walk to return any file and children folder in the folder Golang
[Golang] Writing file in Golang Golang
[Golang] Chuẩn bị 1 project golang. Coding
[Golang] Approach Channel in Calling another function with Golang Golang
[GRPC/Golang] Learning GRPC and Golang through the easy and actual lessons. Golang
[Golang] Writing a metrics exporter through Golang and Prometheus Golang

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Azure] The subscription is not registered to use namespace ‘Microsoft.ContainerService’ May 8, 2025
  • [Azure] Insufficient regional vcpu quota left May 8, 2025
  • [WordPress] How to add a Dynamic watermark on WordPress. May 6, 2025
  • [vnet/Azure] VNet provisioning via Terraform. April 28, 2025
  • [tracetcp] How to perform a tracert command using a specific port. April 3, 2025

Archives

  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2025 NimTechnology.