如何在Golang中为单值上下文错误修复多值?

时间:2018-11-06 10:38:51

标签: go

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)
}

这会引发错误:

  

单值上下文中的多个值。

为什么会发生以及如何解决?

3 个答案:

答案 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,错误,错误)