I have a Go function which returns two integer values. Below is the function
func temp() (int, int){
return 1,1
}
Is it possible to put temp
function directly into a Println
and print both the outputs using string formatting as below:
fmt.Println("first= %d and second = %d", temp() ) // This doesn't work
In Python, I am able to do the following:
def func():
return 1,1
print("{0}={1}".format(*func())
>> '1=2'
Can I do Something similar in Go too?
No, this is not possible. You must assign all values from a multi-value expression to separate variables to use them, e.g.:
a, b := temp()
fmt.Println("first = %d and second = %d", a, b)
// first = 1 and second = 1
[Edit]
Interestingly, it appears that in some cases you can use multi-value expressions as function call arguments if the argument types and arity match, or for purely variadic functions (Go Playground):
func oneTwo() (int, int) {
return 1, 2
}
func incr2(x, y int) (int, int) {
return x + 1, y + 1
}
func main() {
incr2(oneTwo()) // OK: multi-value return and arguments match.
fmt.Println(oneTwo()) // OK: pure variadic function.
fmt.Printf("%d %d", oneTwo()) // ERR: mixed formal and variadic args.
}