Just create a slice of GoNoGoer var evals []GoNoGoer
now you DO NOT need a type assertion like that if ok := eval.(GoNoGoer); ok // REMOVE that line Le mercredi 30 novembre 2016 17:59:07 UTC+1, sc28 a écrit : > > I'm trying to better understand how to properly use interfaces and created > this scenario: > > Let's say I have an 'evaluator' program, that over time will want to add > more and more evaluations of a Go-NoGo nature (Nasa?) > > Here's want I was trying: > > // My Go-NoGo interface - method should return true/false and an error is > false > type GoNoGoer interface { > Eval() (bool, error) > } > > > Here's a couple of concrete evaluation types: > ---------- > > type Evaluation1 struct { > Data string > } > > func (a *Evaluation1) Eval() (bool, error) { > isOk := a.DoMyEvaluationWithTheData() > if !isOk { > return false, fmt.Errorf("evaluation failed because ...") > } > return true, nil > } > > type Evaluation2 struct { > SomeData string > MoreData int64 > } > > func (a *Evaluation2) Eval() (bool, error) { > isOk := a.DoMyEvaluationWithTheStructData() > if !isOk { > return false, fmt.Errorf("evaluation failed because ...") > } > return true, nil > } > > ---------- > > In main - iterate over all the evaluations and print the results of Eval() > > func main() { > one := Evaluation1{Data: "abcabcabc"} > two := Evaluation2{SomeData: "xyzxyz", MoreDate: 128} > > var evals []interface{} <------ So I want a slice of evaluations > (all implemented as various structs) - probably not correct to use > interface{}??? > evals = append(evals, one) > evals = append(evals, two) > > // range over the slice, and if the object has implemented the Eval() > method execute it and print the results (doesn't work) > for _, eval := range evals { > if ok := eval.(GoNoGoer); ok { <-- This also is wrong, I want to go > the other direction (from concrete to interface) > isOk, err := eval.Eval() > fmt.Println(ok, err) > } > } > } > > > I'd appreciate the slap across the head pointing out where I'm missing the > boat! > > TIA > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.