Golang中使用Println打印字符串和函数返回值的方法
Golang中使用Println打印字符串和函数返回值的方法
package main
import (
"fmt"
)
func main() {
fmt.Println("random text",test(1,2))
}
func test(int,int) (int,int) {
return 3, 4
}
我期望上述代码能产生以下结果:
random text 3 4
但我却得到了错误:
multiple-value test() in single-value context
如何获得预期的输出。
看起来Johan的回答很完美。😊
更多关于Golang中使用Println打印字符串和函数返回值的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
仅能在打印语句中直接使用单返回值函数
fmt.Println(test(1,2))
运行完美,输出结果为:
3 4
那么为什么
fmt.Println("random text",test(1,2))
会失败?
我从未单独使用过带函数的打印语句(总是会附带一些字符串信息)。我一直习惯用我提到的那种方式。
你说得对。我也尝试了其他返回类型,结果都一样。这背后肯定有某种原因。让我们看看其他人怎么说。可能是一些显而易见的东西。
既然你是专家!
你好 Rahul,
test 函数返回两个整数值 - 3 和 4
因此,
package main
import (
"fmt"
)
func main() {
a, b := test(1,2)
fmt.Println("random text", a, b)
}
func test(int,int) (int,int) {
return 3, 4
}
这样是可行的。你可以在打印语句中直接使用仅返回单个值的函数。虽然还有其他更复杂的方法来实现这一点,但目前这是最简单的方式。
作为特例,如果函数或方法g的返回值数量与另一个函数或方法f的参数数量相等,且每个返回值都能分别赋值给f的参数,那么调用表达式f(g(g的参数))将会按顺序将g的返回值绑定到f的参数后调用f。f的调用除g的调用外不得包含其他参数,且g必须至少有一个返回值。如果f有最后的…参数,该参数将被分配常规参数赋值后剩余的g返回值。
func Split(s string, pos int) (string, string) {
return s[0:pos], s[pos:]
}
func Join(s, t string) string {
return s + t
}
if Join(Split(value, len(value)/2)) != value {
log.Panic("test fails")
}
因此,允许使用具有多个返回值的函数作为唯一参数来调用函数。
问题在于fmt.Println函数期望接收一系列参数,但test函数返回的是两个值。在Go语言中,当函数返回多个值时,不能直接在需要单个值的地方使用它,除非将多个返回值分别传递给函数。
要解决这个问题,您可以将test函数的返回值作为单独的参数传递给fmt.Println。以下是修正后的代码示例:
package main
import (
"fmt"
)
func main() {
a, b := test(1, 2)
fmt.Println("random text", a, b)
}
func test(int, int) (int, int) {
return 3, 4
}
或者,您也可以直接在fmt.Println中调用函数并将返回值作为单独的参数传递:
package main
import (
"fmt"
)
func main() {
fmt.Println("random text", test(1, 2))
}
func test(int, int) (int, int) {
return 3, 4
}
在第二个示例中,test(1, 2)返回的两个值会被自动展开为fmt.Println的两个单独参数,因此不会出现"multiple-value in single-value context"错误。输出结果将是:
random text 3 4
这利用了Go语言中函数调用时多返回值的自动展开特性。

