InterfaceSlice 가 오 용 된 경우

3104 단어
모든 유형 이 인터페이스 에 값 을 부여 할 수 있 는데 이것 은 일종 의 오 해 를 가 져 올 수 있다.
var dataSlice []int = foo()
var interfaceSlice []interface{
     } = dataSlice

잘못 을 보고 하 다
cannot use dataSlice (type []int) as type []interface { } in assignment
원인 slice 는 컴 파일 할 때 메모리 레이아웃 을 확인 해 야 합 니 다.다음은 interface 의 바 텀 데이터 구조 로 int 형식 과 현저히 다 릅 니 다.
type = struct runtime.eface {
     
    runtime._type *_type;
    void *data;
}

이것 은 [] int 와 [] interface {} 메모리 레이아웃 의 차 이 를 초래 하여 위의 dataSlice 가 interface Slice 에 값 을 부여 할 수 없습니다.
올 바른 방법
var dataSlice []int = foo()
var interfaceSlice []interface{
     } = make([]interface{
     }, len(dataSlice))
for i, d := range dataSlice {
     
	interfaceSlice[i] = d
}

좋은 웹페이지 즐겨찾기