Инициализация переменной ошибки как указатель ошибки - PullRequest
0 голосов
/ 30 сентября 2019

Попытка обработать все ошибки в одной функции отсрочки. Но ошибка не может быть назначена в качестве указателя на ошибку? Как это дает мне недопустимая ошибка адреса памяти

package main

import (
    "fmt"
    "errors"
)

func main() {
    var err *error

    defer func(err *error) {
        if *err != nil {
            fmt.Println("hi")
        } else {
            fmt.Println("oh")
        }
    }(err)
    *err = errors.New("EMPTY_BODY")
}

детская площадка

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Мне никогда не нужно было передавать указатель

package main

import (
    "fmt"
    "errors"
)

func main() {
    var err error

    defer func() {
        if err != nil {
            fmt.Println("hi")
        } else {
            fmt.Println("oh")
        }
    }()
    err = errors.New("EMPTY_BODY")
}

Я думал, что мне нужно, так как defer принимает значение err в этой точке, а не в конце функции.

0 голосов
/ 30 сентября 2019

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

Заменить var err *error на var err = new(error) или err := new(error), чтобы создать экземпляр и заставить этот код работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...