>백엔드 개발 >Golang >Go에서 데이터 구조의 크기를 어떻게 얻을 수 있나요?

Go에서 데이터 구조의 크기를 어떻게 얻을 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 13:13:11674검색

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

Go에서 데이터 구조 크기를 결정하는 일반 함수

Go에서는 C의 sizeof 연산자와 유사한 기본 함수가 부족하여 어려움을 겪습니다. 임의의 데이터 구조의 크기를 검색할 때. 이를 극복하기 위해 인터페이스와 리플렉션을 활용하는 것이 해결책을 제공합니다.

제공된 코드는 다음을 사용하여 이를 달성하려고 시도합니다.

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
}

그러나 이 접근 방식은 크기를 계산하므로 잘못된 결과를 낳습니다. 인터페이스 T에 저장된 객체가 아닌 Reflect.Value 구조입니다.

해결책은 인터페이스의 Size() 메서드를 활용하는 데 있습니다. Reflect.Type:

size := reflect.TypeOf(T).Size() // Corrects the size calculation

이 수정을 통해 함수는 패딩을 고려하여 입력 데이터 구조의 크기를 정확하게 결정할 수 있습니다. 주어진 예에서는 크기를 40으로 정확하게 보고합니다.

위 내용은 Go에서 데이터 구조의 크기를 어떻게 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.