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 回复

是的,这非常有帮助

更多关于Golang新手求助:单值上下文中的多值函数问题(代码勿笑)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


好的好的,我忘了加引号" ",谢了兄弟。

格式说明符 %d 在我的代码中可以执行任何操作

fmt.Println(%d%d, fun())

你好,

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"(余数),但这是拼写问题,不影响代码运行。

回到顶部