Go에서 주소 지정 가능성은 변수의 메모리 주소를 얻고 유효성을 보장하는 기능을 의미합니다. . 로컬 스택 변수는 주소 지정이 불가능하며 이 개념은 Reflect.MakeSlice를 사용하여 생성된 값에 적용됩니다.
reflect.MakeSlice를 사용하는 경우 새 슬라이스 값을 생성합니다. 그러나 이 값은 알려진 주소를 가진 메모리 위치에 저장되지 않습니다. 대신 스택에 일시적으로 존재합니다. 이 스택 할당 값은 스택 프레임이 파괴되면 주소가 유효하지 않게 되므로 슬라이스에 대한 포인터를 생성하는 데 사용할 수 없습니다.
이 문제를 해결하려면 주소 지정 가능한 슬라이스 값을 얻으려면 Reflect.New()를 사용할 수 있습니다. 이 함수는 슬라이스에 대한 포인터를 생성합니다.
myType := reflect.TypeOf(my) slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10) x := reflect.New(slice.Type()).Elem() x.Set(slice)
x.Elem() 호출은 포인터를 역참조하고 실제 슬라이스 값을 반환합니다. 이 값은 이제 All() 메서드에 전달하는 데 사용할 수 있습니다.
Go 언어 사양에 따르면 값은 다음과 같은 경우 주소 지정이 가능합니다.
reflect.MakeSlice의 경우 새로 생성된 슬라이스는 스택에 존재하고 영구 메모리 위치에 저장되지 않기 때문에 이러한 기준을 충족하지 않습니다.
위 내용은 `reflect.MakeSlice`로 생성된 슬라이스를 주소 지정할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!