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)
}
这会引发错误:
单值上下文中的多个值。
为什么会发生这种情况以及我们如何解决它?
fmt.Scan
返回两个值,而您只将一个值捕获到 addedOne
中。
你也应该像这样捕获错误:
addendTwo, err := fmt.Scan()
if err != nil {
// handle error here
}
如果你想忽略错误值(不推荐!),请这样做:
addendTwo, _ := fmt.Scan()
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()
因为 Scan 返回 int 和 error,所以你应该使用 := 语法,它是声明和初始化的简写。
addendOne, err := fmt.Scan()
addendTwo, err := fmt.Scan()
来自 golang fmt 文档:
func Scan(a ...interface{}) (n int, err error)
我在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 标签中得到结果