в первом случае изменяя переменную p в функции Foo(), вы будете работать с копией и не измените значение оригинальной переменной (p1), а втором — измените, поскольку указатель будет ссылаться на оригинальную переменную.
Тут стоит упомянуть, что во втором случае не всегда, передавая указатель, мы изменим данные
В примере ниже будет выводиться Bob, так как мы передаём копию указателя в функцию, где затираем этот указатель (а не сами данные, так как не обращаемся напрямую к данным) новым
type Person struct {
Name string
}
func main() {
p := &Person{
Name: "Bob",
}
fmt.Println(p.Name) // Bob
changePerson(p)
fmt.Println(p.Name) // Bob
}
func changePerson(p *Person) {
p = &Person{
Name: "Vasya",
}
}
Тут стоит упомянуть, что во втором случае не всегда, передавая указатель, мы изменим данные
В примере ниже будет выводиться
Bob, так как мы передаём копию указателя в функцию, где затираем этот указатель (а не сами данные, так как не обращаемся напрямую к данным) новымДля эмулирования http запроса к хендлеру, передачи данных в JSON, проверки http ответов и содержимого тела ответов