Пожалуйста, объясните &, и * указатели в GoLang

Я недавно начал изучать GoLang. Было несколько случаев, когда компилятор выдает ошибку, когда я пытаюсь передать переменные в качестве аргументов внутри функций Go. Я был в состоянии отладить это иногда с помощью указателя перед переменной. Кажется, что и указатели &, и * устраняют ошибку. Хотя я хотел бы понять почему. Мне интересно, в чем разница между &, и *, и когда каждый должен использоваться. Спасибо!

func (ctx *NewContext) SendNotification(rw http.ResponseWriter, req *http.Request, p httprouter.Params) {

    decoder := json.NewDecoder(req.Body)

    var u User

    if err := decoder.Decode(&u); err != nil {
        http.Error(rw, "could not decode request", http.StatusBadRequest)
        return
    }
}

Ответы на вопрос(0)

Ваш ответ на вопрос