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