That’s not what I mean - the function that you would be calling now (that takes 
the []interface{}) would probably be generic for performance reasons, so you 
wouldn’t need to do the conversion - with generics a lot of interface based 
code can go away - and probably will as people chase peak performance… :( 

Still, as someone opposed to generics in Go, I would love to see read-only 
slices as parameters, so you could pass a []concrete to a slice of []interface 
efficiently and safely (or []InterfaceA as []InterfaceB) This would more than 
suffice in lieu of generics in my book...


> On Oct 31, 2018, at 10:47 AM, jake6...@gmail.com wrote:
> 
> It is highly likely that when go2 comes out, with generics, it will be 
> trivial to write a ToInterfaceSlice() function that takes a slice of any type 
> T and returns a []interface{}. 
> 
> On Tuesday, October 30, 2018 at 8:35:39 PM UTC-4, Justin Israel wrote:
> 
> 
> On Wed, Oct 31, 2018 at 1:32 PM robert engels <ren...@ix.netcom.com <>> wrote:
> I have argued for a runtime/built-in to do this - it is so common…. (if doing 
> “kind of OO” in Go)
> 
> I would love to have the ability to do it with built-in support, but I feel 
> like it would go against the goals of not wanting to hide complexity. It 
> wouldn't be "free" to do it (as far as I know) and I doubt the Go maintainers 
> want it to hide the copy into the new slice. My 2 cents.
>  
> 
> 
>> On Oct 30, 2018, at 7:30 PM, Justin Israel <justin...@gmail.com <>> wrote:
>> 
>> 
>> 
>> On Wed, Oct 31, 2018 at 11:21 AM <zloik...@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...@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...@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