Goのスライスでアクションを処理できる汎用関数を作成しようとしています。たとえば、同じタイプのスライスに任意のタイプの項目を追加します。これは単純に、より複雑なソリューションのための一般的な目的であるが、全体的な問題は、この例に沸く:Goでマルチタイプ配列の汎用関数を作成する
package main
type car struct {
make string
color string
}
type submarine struct {
name string
length int
}
func genericAppender(thingList interface{}, thing interface{}) []interface{} {
return append(thingList, thing)
}
func main() {
cars := make([]car, 0, 10)
cars[0] = car{make: "ford", color: "red"}
cars[1] = car{make: "chevy", color: "blue"}
subs := make([]submarine, 0, 10)
subs[0] = submarine{name: "sally", length: 100}
subs[1] = submarine{name: "matilda", length: 200}
newCar := car{make: "bmw", color: "white"}
genericAppender(&cars, newCar)
}
コード遊び場は、このlocation
である上記のエラー、次のように:
prog.go:14: first argument to append must be slice; have interface {}
私はあなたの提案をここで試してみましたが(https://play.golang.org/p/ecJv730Zrd)、genericAppenderNewの引数でtype [] interface {}として "cars(type [] car)を使用できません" "私はこれがまだ可能であるかどうかはわかりません... – gextra
@gextraその場合、2番目のオプションを使用しています。このメソッドを使用する場合は、 'genericInterface'を' genericAppender'に渡す前に型を '[] interface {}'にする必要があります。最初の例では、現在持っているコレクションを取り込み、メソッド内に型アサーションを行います。 – evanmcdonnal
@gextraエラーなしで実行する2番目の提案の完全な例を含めるように更新しました。 – evanmcdonnal