Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Teknik pengekodan dan penyahkodan untuk jenis struktur dalam fungsi Golang

Teknik pengekodan dan penyahkodan untuk jenis struktur dalam fungsi Golang

王林
王林asal
2023-05-15 23:21:11946semak imbas

Golang ialah bahasa pengaturcaraan yang sangat berkuasa yang menyediakan banyak jenis dan fungsi terbina dalam untuk membantu pengaturcara menulis kod yang cekap dengan cepat. Antaranya, jenis struktur adalah yang paling biasa digunakan. Apabila berurusan dengan komunikasi rangkaian, penyimpanan data dan penghantaran, dsb., kita biasanya perlu mengekod data jenis struktur ke dalam data binari atau mensirikannya ke dalam rentetan dalam format JSON untuk penghantaran. Artikel ini akan memperkenalkan beberapa teknik pengekodan dan penyahkodan untuk jenis struktur fungsi Golang.

  1. Definisi jenis struktur

Di Golang, definisi jenis struktur memerlukan penggunaan kata kunci jenis dan kata kunci struct. Sebagai contoh, perkara berikut mentakrifkan jenis struktur Orang, yang mengandungi dua medan: Nama dan Umur:

type Person struct {
    Name string
    Age int
}
  1. Pengekodan dan penyahkodan JSON

JSON adalah ringan, mudah untuk membaca dan menulis format pertukaran data. Di Golang, kita boleh menggunakan fungsi Marshal() dan Unmarshal() dalam pakej json untuk melaksanakan pengekodan dan penyahkodan JSON jenis struktur.

  • Pengekodan JSON

Apabila pengekodan, kita perlu menukar jenis struktur kepada tatasusunan bait jenis []bait, yang boleh dicapai melalui json.Marshal( ) fungsi. Sebagai contoh, contoh berikut mengekod contoh p jenis Orang ke dalam rentetan dalam format JSON:

p := Person{"Tina", 28}
jsonData, _ := json.Marshal(p)
fmt.Println(string(jsonData))   // {"Name":"Tina","Age":28}
  • Penyahkodan JSON

Apabila menyahkod, kita perlu menghuraikan JSON rentetan ke dalam jenis Struktur. Ini boleh dicapai melalui fungsi json.Unmarshal(). Sebagai contoh, contoh berikut menyahkod rentetan JSON jsonStr kepada contoh jenis Orang:

jsonStr := `{"Name":"Tina", "Age": 28}`
var p Person
_ = json.Unmarshal([]byte(jsonStr), &p)
fmt.Println(p)  // {Tina 28}
  1. Pengekodan dan penyahkodan jujukan bait

Dalam proses komunikasi rangkaian atau penyimpanan data , kami Ia juga perlu untuk menyusun jenis struktur ke dalam urutan bait untuk penghantaran. Sebagai contoh, untuk mensirikan contoh jenis Person p ke dalam jujukan bait byteData:

buf := new(bytes.Buffer)
binary.Write(buf, binary.LittleEndian, &p)
byteData := buf.Bytes()
fmt.Printf("%x
", byteData)   // 54696e61001c0000

Kami menggunakan fungsi bait.Buffer dan binary.Write() untuk mensirikan jenis struktur p ke dalam jujukan bait byteData. Parameter kedua fungsi binari.Write() menentukan kaedah pemprosesan pesanan bait, di sini format LittleEndian digunakan.

Begitu juga, kita juga boleh menggunakan fungsi binary.Read() untuk menyahsiri byteData dalam bentuk yang sama, contohnya:

var q Person
err := binary.Read(bytes.NewReader(byteData), binary.LittleEndian, &q)
if err != nil {
    fmt.Println(err)
}
fmt.Println(q)  // {Tina 28}
  1. Pengekodan dan penyahkodan Gob

Gob ialah format pengekodan yang disertakan dengan Golang dan sering digunakan semasa panggilan RPC dan penghantaran data. Di Golang, pakej gob juga disediakan untuk pengekodan dan penyahkodan Gob.

  • Pengekodan Gob

Kita boleh menggunakan fungsi gob.NewEncoder() untuk mencipta contoh pengekod dan kemudian menggunakan kaedah Encode() untuk mengekod jenis struct ke dalam bait urutan. Contohnya, untuk mengekod contoh p jenis Orang ke dalam jujukan bait byteData:

var byteData bytes.Buffer
enc := gob.NewEncoder(&byteData)
err := enc.Encode(&p)
if err != nil {
    fmt.Println(err)
}
fmt.Printf("%x
", byteData.Bytes())   // 026864073544696e61001c

Kami menggunakan fungsi byte.Buffer dan gob.NewEncoder() untuk mengekod jenis struktur p ke dalam jujukan bait byteData.

  • Penyahkod Gob

Apabila menyahkod, kita juga perlu menggunakan pakej gob. Cipta contoh penyahkod dan gunakan kaedah Decode() untuk menyahkod jujukan bait. Sebagai contoh, nyahkod byteData yang dikodkan dalam contoh di atas menjadi contoh q jenis Orang:

dec := gob.NewDecoder(&byteData)
var q Person
err := dec.Decode(&q)
if err != nil {
    fmt.Println(err)
}
fmt.Println(q)  // {Tina 28}

Ringkasan

Jenis struktur ialah jenis data yang biasa digunakan di Golang. Ia digunakan dalam pemprosesan komunikasi rangkaian dan Apabila menyimpan dan menghantar data, kita selalunya perlu mengekod jenis struktur ke dalam data binari atau mensirikannya ke dalam rentetan untuk penghantaran. Artikel ini memperkenalkan beberapa teknik pengekodan dan penyahkodan untuk jenis struktur fungsi Golang, termasuk pengekodan dan penyahkodan JSON, pengekodan dan penyahkodan jujukan bait serta pengekodan dan penyahkodan Gob. Teknik ini boleh membantu kami menyelesaikan tugas pemindahan dan penyimpanan data dengan cepat dan cekap.

Atas ialah kandungan terperinci Teknik pengekodan dan penyahkodan untuk jenis struktur dalam 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