Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penampan protokol dan teknik pengekodan dan penyahkodan dalam bahasa Go

Penampan protokol dan teknik pengekodan dan penyahkodan dalam bahasa Go

WBOY
WBOYasal
2023-06-01 09:22:531415semak imbas

Bahasa Go ialah bahasa pengaturcaraan bertaip statik yang popular, terutamanya sesuai untuk pembangunan aplikasi rangkaian berprestasi tinggi dan tinggi. Dalam aplikasi web, pensirilan data dan penyahserikatan adalah sangat kritikal kerana maklumat perlu ditukar dalam beberapa format antara sistem yang berbeza.

Bahasa Go menyediakan format pertukaran data ringan yang dipanggil Protocol Buffers, yang dibangunkan oleh Google dan digunakan secara meluas untuk pertukaran data dalam sistem teragih. Penampan protokol ialah format data binari bebas bahasa dan bebas platform yang boleh meningkatkan kecekapan penghantaran data dan mengurangkan beban kerja pembangun.

Dalam artikel ini, kami akan meneroka penimbal protokol dan teknik pengekodan dan penyahkodan dalam bahasa Go untuk membantu pembaca lebih memahami dan menggunakan ciri ini untuk memudahkan pembangunan aplikasi rangkaian.

Penimbal Protokol

Penimbal Protokol ialah format pertukaran data ringan yang menggunakan antara muka mudah untuk menerangkan struktur data dan mensirikan data ke dalam format binari melalui pengekodan. Penampan protokol sering digunakan dalam aplikasi rangkaian untuk menukar data antara sistem yang berbeza. Kelebihan utamanya adalah seperti berikut:

  • Bebas bahasa: Penampan protokol menyokong berbilang bahasa pengaturcaraan, dan fail penerangannya diwakili dalam format teks.
  • Kekompakan: Pengekodan penimbal protokol adalah sangat padat, yang boleh mengurangkan penggunaan lebar jalur rangkaian semasa penghantaran data.
  • Kebolehlanjutan: Penampan protokol menyokong perubahan struktur data tanpa menjejaskan kod penghuraian sedia ada.

Berikut ialah contoh mudah menggunakan penimbal protokol:

Tentukan fail format penimbal protokol

Fail format penimbal protokol diwakili oleh sambungan fail .proto perwakilan fail teks. Sebagai contoh, fail .proto berikut mentakrifkan mesej ringkas yang mengandungi medan rentetan bernama Nama dan medan integer bernama Umur:

syntax = "proto3";

message Person {
  string Name = 1;
  int32 Age = 2;
}

Dengan mentakrifkan fail format penampan protokol, ia boleh diterangkan Struktur dan jenis data dan menjana kod untuk mensiri dan menyahsiri data.

Jana kod bahasa Go

Selepas menentukan fail .proto, anda perlu menggunakan alat protoc untuk menyusunnya ke dalam kod bahasa Go. Mula-mula, anda perlu memasang alat protoc:

$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.15.8/protoc-3.15.8-linux-x86_64.zip
$ unzip protoc-3.15.8-linux-x86_64.zip -d protoc3
$ sudo mv protoc3/bin/* /usr/local/bin/
$ sudo mv protoc3/include/* /usr/local/include/

Kemudian, kita boleh menggunakan arahan berikut untuk menjana kod bahasa Go:

$ protoc --go_out=. person.proto

Kod bahasa Go yang dihasilkan adalah seperti berikut:

// Code generated by protoc-gen-go. DO NOT EDIT.
// source: person.proto

package main

import (
  "fmt"
  "proto"
  "bufio"
  "os"
)

func main() {
  person := &proto.Person{Name: "John", Age: 30}

  // Encode to binary format
  data, err := proto.Marshal(person)
  if err != nil {
    fmt.Println("Error:", err)
  }

  // Decode from binary format
  newPerson := &proto.Person{}
  err = proto.Unmarshal(data, newPerson)
  if err != nil {
    fmt.Println("Error:", err)
  }

  fmt.Println("Name:", newPerson.Name)
  fmt.Println("Age:", newPerson.Age)
}

dalam Dalam contoh di atas, kita mula-mula mencipta objek struktur Orang dan mengisi medannya. Kami kemudian menyerikan objek ke dalam format binari dan menyimpannya dalam pembolehubah data. Akhir sekali, kami menyahsirinya menjadi objek struktur Orang baharu dan mencetaknya.

Kemahiran pengekodan dan penyahkodan

Apabila menggunakan penimbal protokol, kita perlu menguasai beberapa kemahiran pengekodan dan penyahkodan asas untuk menggunakan fungsi ini dengan lebih baik. Beberapa petua pengekodan dan penyahkodan disenaraikan di bawah:

  1. Menukar format

Sebelum mensiri mesej ke dalam format binari, kami mungkin perlu menukar beberapa medan kepada format yang berbeza. Sebagai contoh, kita mungkin perlu menukar rentetan kepada tatasusunan bait dan nombor kepada rentetan panjang tetap. Selepas menukarnya kepada format binari, kita boleh menggunakan teknik yang sama untuk memulihkannya kepada format asalnya.

  1. Berbilang Mesej

Penimbal protokol menyokong penyerikan berbilang mesej ke dalam tatasusunan binari yang sama. Ini biasanya digunakan untuk menghantar berbilang mesej untuk mengelakkan overhed mencipta berbilang soket. Apabila penyahkodan, kita perlu mengulangi keseluruhan tatasusunan binari untuk membahagikannya kepada berbilang mesej.

  1. Medan pilihan

Penimbal protokol menyokong penandaan medan tertentu sebagai pilihan. Medan ini mungkin tidak wujud, jika medan tidak wujud, nilai lalai akan digunakan. Semasa pengekodan, kita perlu menyemak sama ada setiap medan pilihan wujud dan mensirikannya ke dalam tatasusunan binari hanya jika ia wujud. Semasa penyahkodan, kita perlu menyemak sama ada setiap medan telah ditandakan sebagai hadir dan hanya memulihkannya kepada objek mesej jika ia wujud.

Kesimpulan

Dalam artikel ini, kami memperkenalkan penimbal protokol serta teknik pengekodan dan penyahkodan dalam bahasa Go. Dengan menggunakan penampan protokol, kami boleh bertukar-tukar data antara sistem yang berbeza dengan lebih mudah dan meningkatkan prestasi dan kecekapan aplikasi rangkaian. Kami juga memperkenalkan beberapa teknik pengekodan dan penyahkodan asas yang boleh membantu kami menggunakan penimbal protokol dengan lebih baik dalam aplikasi sebenar. Saya berharap pembaca dapat memperoleh pemahaman yang lebih mendalam tentang penimbal protokol dan teknik pengekodan dan penyahkodan melalui artikel ini, dan dapat menggunakan teknik ini untuk membangunkan aplikasi rangkaian yang lebih cekap dan boleh dipercayai.

Atas ialah kandungan terperinci Penampan protokol dan teknik pengekodan dan penyahkodan dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn