インターフェースのスライスを作成し、その具体的な種類にそれを開始するいくつかの問題を持つことへのキャストは、任意のヘルプは大幅にコンクリートタイプのスライスを作成し、そのそれぞれのインタフェース
インタフェース
type MatrixElement interface {
GetValue() Element
GetCoordinate() Coordinate
}
コンクリートをappretiatedされるだろう実装
type LocatableElement struct {
value datastructures.Element
coordinate datastructures.Coordinate
}
func (ele LocatableElement)GetValue() datastructures.Element {
return ele.value
}
func (ele LocatableElement)GetCoordinate() datastructures.Coordinate {
return ele.coordinate
}
func CreateLocatableElement(value datastructures.Element, coordinate datastructures.Coordinate) LocatableElement {
return LocatableElement{
value: value,
coordinate: coordinate,
}
}
スライスとしてタイプを定義
type HorizontalMatrix [][]datastructures.MatrixElement
あなたはどちらのキャスト[]ConcreteTypes([]Interfaces)
することはできません新しいHorizonatlMatrix
func CreateHorizontalMatrix(rows int, columns int) HorizontalMatrix {
horzMatrix := make([][]matrix.LocatableElement, rows)
for i := 0; i < rows; i++ {
horzMatrix[i] = make([]matrix.LocatableElement, columns)
}
return horzMatrix;
}
cannot use horzMatrix (type [][]matrix.LocatableElement) as type HorizontalMatrix in return argument
それを埋めるよりとして行列を作る必要があるのいずれか'horzMatrix'はインタフェースへの参照を割り当てるだけです(ポインタの割り当てのみ)実際に物理ペイロードを保持する物理データ構造への実際の割り当ては行われません 割り当て 'horzMatrix [row] [column]'が実際の 'LocatableElement'への割り当てである場合にのみ、doneが実行されます。 (LocatableElement構造体が割り当てられ、作成され、以前に作成されたポインタが新しく割り当てられた構造体を指すようにされている) – MrX
はいそうだと思います。 – Uvelichitel
@MrX、[more background](https://golang.org/doc/faq#convert_slice_of_interface)を参照してください。 – kostix