so it takes an arbitrary number of interface{} values as parameters. Each of the interface{} parameters can only be single-valued.
In the case of
fmt.Println(half(1))
Println receives two single-valued parameters, one int and one bool, and this works fine.
However, in case of
fmt.Println("Return from half(1) ", half(1))
Println receives one single-valued parameter (the string) and one two-valued parameter (the output of half()), and the second one cannot be assigned to a single interface{} value.
It would indeed come in handy if Println had some ‘magic’ here for spreading the output of half() over two interface{} parameters. Luckily the workaround is easy:
a, b := half(1)
fmt.Println("Return from half(1)", a, b)
or use the struct approach that Costa_Konstantinidis proposed just a few minutes ago (while I was writing this :))