> 백엔드 개발 > Golang > 리플렉션을 사용하여 Go에서 구조의 크기를 어떻게 얻을 수 있나요?

리플렉션을 사용하여 Go에서 구조의 크기를 어떻게 얻을 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-11-28 01:40:14
원래의
514명이 탐색했습니다.

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

Go에서 모든 구조의 크기를 가져오는 일반 함수

문제:
목표는 다음을 만드는 것입니다. Go의 sizeof 함수와 유사하게 임의의 구조의 크기를 결정할 수 있는 Go의 일반 함수입니다. C.

코드 및 오류:
제공된 코드는 리플렉션을 사용하여 구조의 크기를 검색합니다. 그러나 개체에 반영하는 대신 Reflect.Value 구조체에 반영하면 잘못된 결과가 발생합니다. 문제의 코드는 다음과 같습니다.

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) // Prints 12, which is incorrect
}
로그인 후 복사

해결책:
이 문제를 해결하려면 객체의 값이 아닌 유형을 반영해야 합니다. Reflect.Type에는 올바른 크기를 제공하는 Size() 메서드가 있습니다. 업데이트된 코드는 다음과 같습니다.

package main

import (
    "fmt"
    "reflect"
)

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)
    size := v.Type().Size()
    fmt.Println(size) // Prints 40, which is correct
}
로그인 후 복사

설명:
수정된 코드는 리플렉션으로 인한 오버헤드 없이 구조의 크기를 반환하는 Reflect.Type의 Size() 메서드를 사용합니다. .

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿