如何修复Golang中单值上下文错误的多个值?

问题描述 投票:0回答:4
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)
}

这会引发错误:

单值上下文中的多个值。

为什么会发生这种情况以及我们如何解决它?

go
4个回答
7
投票

fmt.Scan
返回两个值,而您只将一个值捕获到
addedOne
中。 你也应该像这样捕获错误:

addendTwo, err := fmt.Scan() 
if err != nil {
  // handle error here
}

如果你想忽略错误值(不推荐!),请这样做:

addendTwo, _ := fmt.Scan() 

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

0
投票

因为 Scan 返回 int 和 error,所以你应该使用 := 语法,它是声明和初始化的简写。

addendOne, err := fmt.Scan()
addendTwo, err := fmt.Scan()

来自 golang fmt 文档:

func Scan(a ...interface{}) (n int, err error)


0
投票

我在beego v2中使用follow方式,有效

    //receive tag list in post
tags := make([]string, 0, 3)
inputValues, _ := c.Input()
for k, v := range inputValues {
    if k == "tags[]" {
        tags = append(tags, v...)
    }
}

然后你将在 var 标签中得到结果

© www.soinside.com 2019 - 2024. All rights reserved.