множественное назначение и создание с указателем в golang - PullRequest
1 голос
/ 22 апреля 2020

Язык spe c слишком сложен для меня, чтобы разобрать этот простой вопрос, поэтому спрашиваю здесь.

Я написал

func take_arg(x *int64) {
    *x,_ = strconv.ParseInt( os.Args[1],  10,64 )
    }

, который работает.

Однако, если я попытаюсь обработать ошибку

func take_arg(x *int64) {
    *x,problem := strconv.ParseInt( os.Args[1],  10,64 )
    fix(problem)
    }

, я заблокирован компилятором, поскольку non-name *x on left side of :=.

——

edit : Обычно он работает с x,problem := ….

——-

Что дает? Что мне делать?

1 Ответ

0 голосов
/ 22 апреля 2020

func take_arg(x *int64){...} => x *int64 - указатель значения x (int64) в heap.

Package: strconv
func ParseInt(s string, base int, bitSize int) (i int64, err error)

возвращаемых копий (новый неизменяемый экземпляр ) из int64 и error, и вы не можете назначить возврат value для x pointer. Вы должны работать с указателем в качестве указателя:

func take_arg(x *int64) {
    if i, err := strconv.ParseInt(os.Args[1], 10, 64); err != nil {
        /***
            `fix(err)` or other action
            for example:
               `*x = fix(err)`
            or
               `*x = 777`
        ***/
    } else {
        *x = i
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...