Cara Menukar Antara Go Structs dan Byte Arrays: Kaedah Selamat dan Cekap?

DDD
Lepaskan: 2024-10-28 07:17:02
asal
432 orang telah melayarinya

How to Convert Between Go Structs and Byte Arrays: Safe and Efficient Methods?

Penukaran Go antara Struct dan Array Byte

Konteks:

Dalam Go, cabaran timbul apabila cuba meniru C operasi pemutus jenis gaya, seperti pemetaan ingatan terus ke struktur. Artikel ini akan menyelidiki kaedah yang tersedia untuk mencapai penukaran tersebut.

Taip Casting dengan tidak selamat.Penunjuk:

Secara sejarah, tidak selamat.Penunjuk digunakan untuk manipulasi ingatan langsung. Walau bagaimanapun, ia memerlukan penukaran jenis yang jelas dan membawa risiko keselamatan kerana potensinya untuk kerosakan ingatan.

<code class="go">import "unsafe"

type packet struct {
    opcode uint16
    data [1024]byte
}

var pkt1 packet
...
// Low-level type casting
ptr := unsafe.Pointer(&pkt1)
raddrPtr := (*uint32)(unsafe.Pointer(uintptr(ptr) + 2))</code>
Salin selepas log masuk

Pakej Pengekodan/Perduaan:

Untuk menangani kebimbangan ini, pengekodan/pakej binari menyediakan penyelesaian yang lebih selamat dan mudah. Pakej ini membolehkan pensirilan dan penyahsirilan data yang cekap menggunakan pengekodan pratakrif seperti little-endian dan big-endian.

<code class="go">// Encoding and decoding example
package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
)

type T struct {
    A uint32
    B float64
}

func main() {
    // Create a struct and write it.
    t := T{A: 0xEEFFEEFF, B: 3.14}
    buf := &bytes.Buffer{}
    err := binary.Write(buf, binary.BigEndian, t)
    if err != nil {
        panic(err)
    }
    fmt.Println(buf.Bytes())

    // Read into an empty struct.
    t = T{}
    err = binary.Read(buf, binary.BigEndian, &t)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%x %f", t.A, t.B)
}</code>
Salin selepas log masuk

Dengan menggunakan pakej pengekodan/perduaan, seseorang boleh mengendalikan saiz data dan penukaran endianness dengan mudah , memastikan keselamatan jenis dan mengekalkan prestasi.

Atas ialah kandungan terperinci Cara Menukar Antara Go Structs dan Byte Arrays: Kaedah Selamat dan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!