From multiple to single-value context in Go

These are the results of exploring one aspect of the Go language; functions can return multiple values. Consider the following simple function:

func ab() (a,b int) {
    a,b = 1,2

Clearly, this function cannot be used in other function calls that expect a single value.


The compiler will help you: “multiple-value ab() in single-value context”.

Now suppose you want to take only the first value without introducing an intermediate variable. One possible solution might be to create this helper function:

func first(args …interface{})interface{} {
    return args[0]

Such that you can write:


But what if you want to generalize this such that you won’t end up with functions like second(),third(),… To achieve this, I tried the following:

func pick(index int, args …interface{})interface{} {
    return args[index]

However, again the compiler prompts with the same error message: “multiple-value ab() in single-value context”. It is my interpretation that the compiler (in this case) cannot implicitly convert the multiple returns into a slice because of the extra function parameter.

So instead I created this slice converter function:

func slice(args …interface{}) []interface{} {
    return args

And with that, you can write:


comments powered by Disqus