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
Mary-Kate Olsenasal
2024-12-01 13:13:11746semak imbas

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
}

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

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!

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