2012-02-02 4 views
4

I AppEngine에의 datastore.PutMulti에 전달하는 슬라이스 []interface{} (에 구조체의 조각을 할당하기 위해 노력하고있어의 슬라이스 그러나,이 컴파일 에러의 원인이되는 두 가지 유형이 분명히 호환되지 같이.
기본적으로 cannot use type[]*MyStruct as type []interface { } in assignment변환 조각은 빈 인터페이스

내가 가진 :

var src []*MyStruct 
var dest []interface{} 
… 
dest = src // This line fails. 

은 각 요소에 한 번에 하나씩 복사하지 않고 destsrc을 복사 어쨌든 거기

?
+0

Go에서는 할당 (=)이 복사 (내장 함수 '복사')와 다릅니다. –

+0

앱 엔진 용 go1 베타가 위의 작업을 수행 할 수 있도록 datastore.PutMulti에 대한 서명을 변경했다는 것을 발견했습니다. 만세! – djd

답변

6

당신은 한 번에 하나씩 복사해야합니다. 주변에는 방법이 없습니다.

이것을 받아들이면 인터페이스에서 구조체를 실제로 래핑하는 것이 실제로 메모리 수준에서 래핑된다는 사실을 생각해야합니다. 인터페이스는 원래 유형에 대한 포인터와 유형 자체에 대한 설명자를 포함합니다. 인터페이스에 단일 구조체를 캐스팅 할 때 실제로 래핑합니다. 따라서 인터페이스에서 구조체를 래핑하려면 한 번에 하나씩 복사해야합니다.

+0

그것이 내가 두려워했던 것입니다. 한 가지 경우에 캐스트하는 데 필요한 "작업"이 필요하다는 사실 때문에 컴파일러가 슬라이스를 사용하여 수행 할 수없는 이유가 설명됩니다. 오 잘! – djd

+0

이 작업을 수행해야하는 이유는 인터페이스로의 쉬운 변환과 구조 수준에서의 간접적 인 작업 간의 절충입니다. – Jessta

관련 문제