Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mendapatkan Saiz Sebarang Struktur Data dalam Go?

Bagaimanakah Saya Boleh Mendapatkan Saiz Sebarang Struktur Data dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-01 13:13:11
asal
672 orang telah melayarinya

How Can I Get the Size of Any Data Structure in Go?

Fungsi Generik untuk Menentukan Saiz Struktur Data dalam Go

Dalam Go, kekurangan fungsi asli yang serupa dengan operator saiz C menimbulkan cabaran apabila mendapatkan semula saiz struktur data sewenang-wenangnya. Untuk mengatasinya, memanfaatkan antara muka dan refleksi menawarkan penyelesaian.

Kod yang disediakan cuba mencapai ini menggunakan:

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

func main() {
    type myType struct {
        a int
        b int64
        c float32
        d float64
        e float64
    }
    info := myType{1, 2, 3.0, 4.0, 5.0}
    getSize(info)
}

func getSize(T interface{}) {
    v := reflect.ValueOf(T)
    const size = unsafe.Sizeof(v)
    fmt.Println(size) // Incorrectly produces 12
}
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini menghasilkan keputusan yang salah kerana ia mengira saiz struktur mencerminkan.Nilai dan bukannya objek yang disimpan dalam antara muka T.

Penyelesaian terletak pada penggunaan Saiz() kaedah pantulan.Jenis:

size := reflect.TypeOf(T).Size() // Corrects the size calculation
Salin selepas log masuk

Pengubahsuaian ini membolehkan fungsi menentukan dengan tepat saiz struktur data input, mengambil kira padding. Dalam contoh yang diberikan, ia melaporkan saiznya dengan betul sebagai 40.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Saiz Sebarang Struktur Data dalam Go?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan