Am I missing something ?? When u say : For any function F and some type T declared as func F(x ...T) {} within F x will have type []T. You can call F with a slice s of type []T as F(s...)
Why is this needed ?? What's the point of using this "crypto-syntax" rather than just declaring the function as func F(x [ ]T) { } On Friday, May 3, 2019 at 1:13:02 PM UTC-4, Ian Lance Taylor wrote: > > On Fri, May 3, 2019 at 7:57 AM Louki Sumirniy > <louki.sumi...@gmail.com <javascript:>> wrote: > > > > Ellipsis makes the parameter type into a slice, but in append it makes > the append repeat for each element, or do I misunderstand this? > > > > There is a syntactic distinction between them too. Parameters it is a > prefix to the type, append it is a suffix to the name. It neatly alludes to > the direction in which the affected variable is operated on - inside the > function name ...type means name []type and for append, we are splitting > the slice into a tuple (internally), at least as I understand it, and the > parameter is the opposite, tuple to slice. > > > > I sometimes lament the lack of a tuple type in Go (I previously worked a > lot with Python and PHP), but []interface{} isn't that much more difficult > and the ellipsis syntax is quite handy for these cases - usually loading or > otherwise modifying essentially a super simple container array. > > For any function F and some type T declared as > > func F(x ...T) {} > > within F x will have type []T. You can call F with a slice s of type []T > as > > F(s...) > > That will pass the slice s to F as the final parameter. This works > for any variadic function F. > > The append function is implicitly declared as > > func append(to []byte, add ...byte) > > You can call it as > > append(to, add...) > > Here F is append and T is byte. > > There is a special case for append with an argument of type string, > but other than that append is just like any other variadic function. > > Ian > > > > > On Friday, 3 May 2019 16:44:47 UTC+2, Ian Lance Taylor wrote: > >> > >> On Fri, May 3, 2019 at 7:34 AM Louki Sumirniy > >> <louki.sumi...@gmail.com> wrote: > >> > > >> > The ellipsis has two uses in Go, one is in variadic parameters, the > other is in the slice append operator. It is essentially an iterator that > takes a list and turns it into a slice (parameters) or takes a slice and > turns it into a recursive iteration (append). Parameters with the ellipsis > are addressed inside the function as a slice of the type after the > ellipsis. > >> > >> Note that there is nothing special about append here, it's just like > >> passing a slice to any other variadic parameter. See > >> https://golang.org/ref/spec#Passing_arguments_to_..._parameters . > >> > >> Ian > > > > -- > > 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 golan...@googlegroups.com <javascript:>. > > For more options, visit 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.