I have argued for a runtime/built-in to do this - it is so common…. (if doing 
“kind of OO” in Go)

> On Oct 30, 2018, at 7:30 PM, Justin Israel <justinisr...@gmail.com> wrote:
> 
> 
> 
> On Wed, Oct 31, 2018 at 11:21 AM <zloikom...@gmail.com 
> <mailto:zloikom...@gmail.com>> wrote:
> Hello, everyone.
> Consider following code:
> 
> package main
> 
> import "fmt"
> 
> type implementation struct {
>     d []int
> }
> 
> func (impl *implementation) getData() interface{} {
>     return impl.d
> }
> 
> type phase struct{}
> 
> type data interface {
>     getData() interface{}
> }
> 
> func MakeIntDataPhase() *phase {
>     return &phase{}
> }
> 
> func (p *phase) run(population []data) []data {
>     return nil
> }
> 
> func main() {
>     var population []implementation
>     MyPhase := MakeIntDataPhase()
>     fmt.Println(MyPhase.run(population))
> 
> }
> 
> When running following code in playground I got following error: 
> prog.go:30:25: cannot use population (type []implementation) as type []data 
> in argument to MyPhase.run
> If I understand correctly it is because slice of interface type cannot be 
> converted by the compiler to concrete type.
> 
> What is correct way in golang to implement functionality that is presented in 
> the example?
> When method argument defined using a slice of some interface, how I can pass 
> it a slice of a concrete type that implements the interface?
> 
> You would end up needing to just do   
> 
>     func (p *phase) run(population {}interface) []data
> 
> and then type assert the {}interface into []implementation
> There isn't a way to directly pass a slice of concrete type to a function 
> that accepts a slice of interface, unless you first do this:
> 
> iface := make([]data, len(population))
> for i, p := range population {
>     iface[i] = p
> }
> MyPhase.run(iface)
> 
> Justin
> 
> -- 
> 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 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> -- 
> 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 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
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.

Reply via email to