I’m confused… it is A that doesn’t work, and B works… everyone keeps stating 
that B doesn’t work and A works….

> On Oct 24, 2018, at 10:55 AM, jake6...@gmail.com wrote:
> 
> That is correct. The relevant part of 
> https://golang.org/ref/spec#Passing_arguments_to_..._parameters 
> <https://golang.org/ref/spec#Passing_arguments_to_..._parameters> is where it 
> says: " respective parameter passing rules 
> <https://golang.org/ref/spec#Passing_arguments_to_..._parameters>apply". This 
> links to https://golang.org/ref/spec#Passing_arguments_to_..._parameters 
> <https://golang.org/ref/spec#Passing_arguments_to_..._parameters> which says:
> 
> "Otherwise, the value passed is a new slice of type []T with a new underlying 
> array whose successive elements are the actual arguments, which all must be 
> assignable <https://golang.org/ref/spec#Assignability> to T."
> 
> So in the OP's example https://play.golang.org/p/59bpr8TCIge 
> <https://play.golang.org/p/59bpr8TCIge>, the function A() is assigning a 
> []string to the variadic ...[]interface{}. Since string is assignable to 
> interface{}. this is fine. The function B() is assigning a []interface{} to 
> the variadic of ...[]string. Since interface{} is not assignable to string, 
> this is not allowed. 
> 
> Hope that clarifies. 
> 
> 
> On Wednesday, October 24, 2018 at 9:11:50 AM UTC-4, Robert Engels wrote:
> But it is the varadic one that works according to OP. 
> 
> On Oct 24, 2018, at 4:19 AM, Jan Mercl <0xj...@ <>gmail.com 
> <http://gmail.com/>> wrote:
> 
>> On Wed, Oct 24, 2018 at 7:34 AM Mayank Jha <mayank2...@ <>gmail.com 
>> <http://gmail.com/>> wrote:
>> 
>> > why does A() not work while B works here, 
>> > https://play.golang.org/p/59bpr8TCIge 
>> > <https://play.golang.org/p/59bpr8TCIge> 
>> 
>> Type mismatch. The compiler is clear about it:
>> 
>>         prog.go:8:12: cannot use s (type []string) as type []interface {} in 
>> append
>> 
>> From https://golang.org/ref/spec#Appending_and_copying_slices 
>> <https://golang.org/ref/spec#Appending_and_copying_slices>
>> 
>> ----
>> The variadic function append appends zero or more values x to s of type S, 
>> which must be a slice type, 
>> and returns the resulting slice, also of type S. The values x are passed to 
>> a parameter of type ...T
>> where T is the element typeof S and the respective parameter passing rules 
>> apply. As a special case,
>> append also accepts a first argument assignable to type []byte with a second 
>> argument of string type
>> followed by .... This form appends the bytes of the string.
>> ---
>> 
>> In the OP code, type T is `interface{}`, but the appended elements have type 
>> `string`. That violates the above quoted specs.
>> 
>> 
>> -- 
>> -j
>> 
>> 
>> -- 
>> 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 <http://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