Rumah  >  Artikel  >  pembangunan bahagian belakang  >  json, xml dan kaedah pengekodan dan penyahkodan protobuf bagi fungsi Golang

json, xml dan kaedah pengekodan dan penyahkodan protobuf bagi fungsi Golang

王林
王林asal
2023-05-18 08:00:241361semak imbas

Golang ialah bahasa pengaturcaraan sumber terbuka yang digunakan secara meluas dalam pembangunan aplikasi rangkaian. Di Golang, ia bukan sahaja menyediakan perpustakaan fungsi yang kaya, tetapi juga menyediakan pelbagai kaedah pengekodan dan penyahkodan, termasuk json, xml dan protobuf. Artikel ini akan memperkenalkan kaedah pengekodan dan penyahkodan json, xml dan protobuf bagi fungsi Golang dan penggunaannya.

1. Pengekodan dan penyahkodan json

1.1 Pengekodan

Di Golang, pengekodan struktur ke dalam format json adalah sangat mudah. Hanya gunakan fungsi Marshal dalam pakej json untuk mengekod struktur ke dalam data json.

Sebagai contoh, kita mempunyai struktur seperti berikut:

type Student struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address string `json:"address"`
}

Jika kita ingin mengekod struktur ini ke dalam format json, kita boleh melakukan ini:

s := Student{
    Name:    "张三",
    Age:     18,
    Address: "北京市朝阳区",
}
b, err := json.Marshal(s)
if err != nil {
    //错误处理
}
fmt.Println(string(b))

Format json output adalah seperti berikut :

{
    "name": "张三",
    "age": 18,
    "address": "北京市朝阳区"
}

1.2 Penyahkodan

Begitu juga, ia juga sangat mudah untuk menggunakan fungsi Unmarshal dalam pakej json untuk menyahkod data json ke dalam struktur. Hanya hantar data json ke dalam fungsi Unmarshal.

Sebagai contoh, kita mempunyai data json berikut:

data := `{
    "name": "李四",
    "age": 20,
    "address": "上海市浦东新区"
}`

Jika kita ingin menyahkod data json ini ke dalam struktur, kita boleh melakukan ini:

var s Student
err := json.Unmarshal([]byte(data), &s)
if err != nil {
    //错误处理
}
fmt.Println(s.Name, s.Age, s.Address)

Hasil output ialah:

李四 20 上海市浦东新区

2. Pengekodan dan penyahkodan XML

2.1 Pengekodan

Di Golang, struktur juga boleh dikodkan ke dalam format xml. Hanya gunakan fungsi Marshal dalam pakej pengekodan/xml.

Sebagai contoh, kami mempunyai struktur seperti berikut:

type Student struct {
    Name    string `xml:"name"`
    Age     int    `xml:"age"`
    Address string `xml:"address"`
}

Jika kami ingin mengekod struktur ini ke dalam format xml, kami boleh melakukan ini:

s := Student{
    Name:    "张三",
    Age:     18,
    Address: "北京市朝阳区",
}
b, err := xml.Marshal(s)
if err != nil {
    //错误处理
}
fmt.Println(string(b))

Output xml format As berikut:

<Student>
    <name>张三</name>
    <age>18</age>
    <address>北京市朝阳区</address>
</Student>

2.2 Penyahkodan

Begitu juga, ia juga sangat mudah untuk menggunakan fungsi Unmarshal dalam pakej pengekodan/xml untuk menyahkod data xml ke dalam struktur. Hanya hantar data xml ke dalam fungsi Unmarshal.

Sebagai contoh, kami mempunyai data xml berikut:

data := `
<Student>
    <name>李四</name>
    <age>20</age>
    <address>上海市浦东新区</address>
</Student>`

Jika kami ingin menyahkod data xml ini ke dalam struktur, kami boleh melakukan ini:

var s Student
err := xml.Unmarshal([]byte(data), &s)
if err != nil {
    //错误处理
}
fmt.Println(s.Name, s.Age, s.Address)

Hasil output ialah:

李四 20 上海市浦东新区

3. pengekodan dan penyahkodan protobuf

3.1 Pasang protobuf

Sebelum pengekodan dan penyahkodan protobuf, protobuf perlu dipasang terlebih dahulu. Kaedah pemasangan adalah seperti berikut:

  1. Muat turun fail pemasangan protobuf. Alamat muat turun: https://github.com/protocolbuffers/protobuf/releases
  2. Ekstrak fail pemasangan dan masukkan direktori yang dinyahmampat.
  3. Laksanakan arahan berikut untuk memasang protobuf:
./configure
make
make check
sudo make install
sudo ldconfig
  1. Semak sama ada protobuf berjaya dipasang:
rreee

Jika maklumat serupa seperti berikut adalah output, ini bermakna protobuf telah berjaya dipasang:

protoc --version

3.2 Menulis fail protobuf

Sebelum pengekodan dan penyahkodan protobuf, anda perlu menulis fail protobuf. Dalam fail protobuf, anda perlu menentukan jenis Mesej dan menetapkan teg kepada setiap medan.

Sebagai contoh, kami menulis fail protobuf seperti berikut:

libprotoc 3.6.1

Dalam protobuf, tag ialah nilai integer yang digunakan untuk mengenal pasti setiap medan. Dalam contoh ini, medan nama ditetapkan kepada 1, medan umur ditetapkan kepada 2 dan medan alamat ditetapkan kepada 3.

3.3 Pengekodan

Di Golang, pengekodan menggunakan protobuf adalah sangat mudah. Hanya gunakan fungsi Marshal dalam pakej protobuf.

Sebagai contoh, kami mempunyai struktur seperti berikut:

syntax = "proto3";
package main;

message Student {
    string name = 1;
    int32 age    = 2;
    string address = 3;
}

Pengekodan protobuf output adalah seperti berikut:

s := &pb.Student{
    Name:    "张三",
    Age:     18,
    Address: "北京市朝阳区",
}
b, err := proto.Marshal(s)
if err != nil {
    //错误处理
}
fmt.Println(string(b))

3.4 Penyahkodan

Begitu juga, gunakan pakej protobuf Fungsi Unmarshal untuk menyahkod data protobuf ke dalam struktur juga sangat mudah. Hanya hantar data protobuf dan jenis Mesej ke dalam fungsi Unmarshal.

Sebagai contoh, kita mempunyai data protobuf berikut:

1:6
2:18
3:"北京市朝阳区"

Jika kita ingin menyahkod data protobuf ini kepada struktur, kita boleh melakukan ini:

data := []byte{0x0a, 0x06, 0xe5, 0xbc, 0xa0, 0xe4, 0xb8, 0x89, 0x10, 0x12, 0x0f, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, 0x9b, 0xbd, 0xe5, 0x8c, 0x9d, 0xe5, 0x8c, 0x97, 0xe5, 0x8c, 0x80, 0x1a, 0x0d, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, 0x9b, 0xbd, 0xe5, 0x8c, 0x9d}

Hasil output ialah:

var s pb.Student
err := proto.Unmarshal(data, &s)
if err != nil {
    //错误处理
}
fmt.Println(s.Name, s.Age, s.Address)

Ringkasan

Di Golang, pelbagai kaedah pengekodan dan penyahkodan disediakan untuk memenuhi keperluan senario yang berbeza. pengekodan dan penyahkodan json, pengekodan dan penyahkodan xml, dan pengekodan dan penyahkodan protobuf adalah kaedah pengekodan dan penyahkodan yang biasa digunakan dan mempunyai kebolehgunaan yang luas. Menguasai codec ini boleh membantu kami membangunkan aplikasi rangkaian dengan lebih mudah.

Atas ialah kandungan terperinci json, xml dan kaedah pengekodan dan penyahkodan protobuf bagi fungsi Golang. 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