p *int = &x
fmt.Println("Value:", *p)
По нему у нас "p" имеет тип ссылки на адрес x, и в выводе потом разыменование "p", которое выводит значение по адресу, на который ссылается "p".
Есть также такой пример:
type QueryError struct {
Query string
Err error
}
func (e *QueryError) Error() string { return e.Query + ": " + e.Err.Error() }
Здесь у нас есть структура QueryError, которая указывается в методе Error(), как e имеющая тип ссылки, как я понимаю, на эту самую структуру. При этом звёздочек и амперсандов нет ни в возвращении метода, ни в самой структуре.
Можете объяснить логику, как Го понимает на что я хочу ссылаться, почему я не могу написать просто (e QueryError), почему я в этом случае не пишу нигде звёздочек и амперсандов?
Т.е. по примеру выше мне в целом всё ясно, а вот по примеру со структурой я вообще логики не улавливаю, почему написали именно так, и почему это работает.
Для типов "указатель на структуру" оператор "точка" определен как "доступ к полю". Что именно вызывает недоумение?
Т.е. у меня e.Query - это грубо говоря разыменовывание?
Меня тоже во время изучения указателей в го это смущало
Обсуждают сегодня