Go의 인터페이스 배열 할당 난제
Go에서는 아래와 같이 구조체 배열을 인터페이스 배열에 직접 할당하려는 시도가 있습니다. 컴파일 시간 오류가 발생합니다.
x := []MyStruct{...} var y []interface{} y = x // Error: cannot use x as type []interface {}
이 오류는 컴파일 시간의 근본적인 차이점에서 비롯됩니다. 구조체 유형과 인터페이스는 메모리에 저장됩니다. 인터페이스는 유형 정보와 데이터로 구성된 두 단어 쌍으로 저장되는 반면 구조체 유형은 메모리에 인접한 필드로 저장됩니다.
이러한 표현이 정렬되지 않기 때문에 둘 사이의 직접 변환은 불가능합니다. 요소를 대상 슬라이스에 개별적으로 복사해야 합니다.
이 문제를 해결하려면 다음 옵션 중 하나를 고려하십시오.
var y []interface{} y = make([]interface{}, len(x)) for i, v := range x { y[i] = v }
var y interface{} y = x
후자의 시나리오에서 인터페이스는 기본 []MyStruct 슬라이스에 대한 추상 참조를 보유하므로 다음을 허용합니다. 다형성 행동.
위 내용은 Go Struct 배열을 인터페이스 배열에 어떻게 할당할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!