Golang新手求助:单值上下文中的多值函数问题(代码勿笑)
Golang新手求助:单值上下文中的多值函数问题(代码勿笑)
// 程序用于求商和余数
package main
import "fmt"
func main() {
fmt.Println("5 / 3 , quotient and reminder", DiviReminder(5, 3)) // 这里有问题
}
func DiviReminder(a, b int64) (int64, int64) {
quotient := a / b
reminder := a % b
return quotient, reminder
}
6 回复
好的好的,我忘了加引号" ",谢了兄弟。
你好,
fmt.Println(%d%d, fun()) // 语法错误
请使用:
fmt.Printf("%d %d", fun())
你的函数返回了两个值。Println(基本上)只期望一个值。所以,
q, r := DiviReminder(...)
fmt.Println("...", q, r)
现在,上面提到的"基本上"稍微简化了情况——Println接受可变数量的参数,因此你可能会认为可以像你之前那样做并且它会工作。但由于Go处理函数调用中多个返回值的方式,它实际上不起作用。基本上,如果返回值与参数完全匹配,你可以将函数调用作为唯一参数来使用:
func DiviReminder (a, b int64) (int64, int64) {
...
}
func PrintResults(q, r int64) {
fmt.Println("The results were", q, "and" ,r)
}
func main() {
PrintResults(DiviReminder(5, 3))
}
但如果你还要传递其他参数,或者函数接受可变数量的参数,这个方法就不适用了。
这是一个很常见的Go语言新手问题。问题出现在fmt.Println("5 / 3 , quotient and reminder", DiviReminder(5, 3))这一行。
DiviReminder函数返回两个值(int64, int64),但在单值上下文中(如函数参数)只能使用一个返回值。你需要分别接收这两个返回值。
以下是修正后的代码:
package main
import "fmt"
func main() {
quotient, reminder := DiviReminder(5, 3)
fmt.Printf("5 / 3, quotient: %d, reminder: %d\n", quotient, reminder)
}
func DiviReminder(a, b int64) (int64, int64) {
quotient := a / b
reminder := a % b
return quotient, reminder
}
或者如果你不需要使用单独的变量,也可以这样写:
package main
import "fmt"
func main() {
fmt.Printf("5 / 3, quotient: %d, reminder: %d\n", DiviReminder(5, 3))
}
func DiviReminder(a, b int64) (int64, int64) {
quotient := a / b
reminder := a % b
return quotient, reminder
}
另外,你的函数名DiviReminder中的"Reminder"应该是"Remainder"(余数),但这是拼写问题,不影响代码运行。


