2017-11-01 10 views
0

バイナリファイルを処理しています。私は任意の構造をとり、それらの構造の配列を返す関数が必要です。どうすればいい?以下は私が達成しようとしているものの簡単な例です。現在、私はそれぞれの構造のための関数を持っています。唯一の違いは、ラインである:任意の構造体を関数パラメータとして渡します。

dataBuf, err := make([]arbitrary_struct_type, numRecs) 
type structA struct { 
    id int32 
    sDate float64 
    name string 
} 

type structB struct { 
    area int32 
    polygon string 
} 

type structC struct { 
    sTime float64 
    eTime float64 
    tSlice int32 
    kml string 
} 

func readDataset(grp *Group, arbitrary_struct_type type) ([]arbitrary_struct_type type, error) { 
    ... 
    dataBuf, err := make([]arbitrary_struct_type, numRecs) 
    ... 
    return dataBuf, err 
} 

func main() { 
    ... 
    a, err := readDataset(grp1, structA) 
    ... 
    b, err := readDataset(grp2, structB) 
    ... 
    c, err := readDataset(grp3, structC) 
    ... 
} 

答えて

0

おそらく、スライスではなく、配列を返すようにしたいです。

あなたがスライスを作るためにreflect.MakeSlice()機能を使用することができますし、あなたがreflect.TypeOf()機能

を使用することができ、任意のオブジェクトの型を取得するために私が「https://github.com/strongo/bots-framework

+0

に使用されているhttps://github.com/strongo/app/blob/master/db/interfaces.go & https://github.com/strongo/app/blob/master/gaedb/database.goでも似たようなことができますやっています私は署名を次のようにします:func readDataset(grp * Group、type)([] arbitrary_struct_type、error)?しかし、それは私が戻り値をどのように渡すかは解決しません。 – JimF

+2

'interface {}'や '[] interface {}'を返すか、インタフェースを定義して '[] YourInterface'を返せます。 –

+0

DB(具体的にはGooge AppEngine Datastore)からエンティティを読み取るのと同様の作業を行うコードへのリンクを追加しました。 –

関連する問題