package main
import "fmt"
func main() {
fmt.Println("Enter a number: ")
var addendOne int = fmt.Scan()
fmt.Println("Enter another number: ")
var addendTwo int = fmt.Scan()
sum := addendOne + addendTwo
fmt.Println(addendOne, " + ", addendTwo, " = ", sum)
}
这会引发错误:
单值上下文中的多个值。
为什么会发生以及如何解决?
答案 0 :(得分:2)
fmt.Scan()
返回两个值,并且您的代码在调用时仅期望一个。
扫描签名func Scan(a ...interface{}) (n int, err error)
首先返回扫描项目的数量,最后返回错误。错误位置的nil值表示没有错误。
像这样更改代码:
addendOne, err := fmt.Scan()
if err != nil {
//Check your error here
}
fmt.Println("Enter another number: ")
addendTwo, err := fmt.Scan()
if err != nil {
//Check your error here
}
如果您真的想忽略错误,可以使用空白标识符_
:
addendOne, _ := fmt.Scan()
答案 1 :(得分:2)
fmt.Scan
返回两个值,而您只捕获了addedOne
中的一个。
您也应该像这样捕获错误:
addendTwo, err := fmt.Scan()
if err != nil {
// handle error here
}
如果要忽略错误值(不建议使用!),请执行以下操作:
addendTwo, _ := fmt.Scan()
答案 2 :(得分:0)
因为Scan返回int和error,所以您应该使用:=语法来进行声明和初始化。
addendOne, err := fmt.Scan()
addendTwo, err := fmt.Scan()
来自golang fmt文档:
func Scan(a ... interface {})(n int,错误,错误)