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 중국어 웹사이트의 기타 관련 기사를 참조하세요!