Как исправить множественное значение для ошибки контекста одного значения в Голанге? - PullRequest
0 голосов
/ 06 ноября 2018
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 голосов
/ 06 ноября 2018

fmt.Scan возвращают два значения, и вы только одно получаете в addedOne. Вы должны также поймать ошибку:

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

если вы хотите игнорировать значение ошибки (не рекомендуется!), Сделайте это так:

addendTwo, _ := fmt.Scan() 
0 голосов
/ 06 ноября 2018

Поскольку Scan возвращает int и error, вам следует использовать синтаксис: =, который является кратким обозначением для объявления и инициализации.

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

Из документации golang fmt:

func Scan (a ... interface {}) (n int, ошибка err)

0 голосов
/ 06 ноября 2018

fmt.Scan() возвращает два значения, и ваш код ожидает только одно, когда вы его вызываете.

Сканирование подписи func Scan(a ...interface{}) (n int, err error) возвращает сначала количество отсканированных элементов и, в конечном итоге, ошибку. Нулевое значение в позиции ошибки означает, что ошибки не было.

Измените свой код следующим образом:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...