170 похожих чатов

Подскажите, пожалуйста, по указателям. Есть следующий пример: var x int = 4 var

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), почему я в этом случае не пишу нигде звёздочек и амперсандов?

4 ответов

16 просмотров
Eesoos- Автор вопроса

Т.е. по примеру выше мне в целом всё ясно, а вот по примеру со структурой я вообще логики не улавливаю, почему написали именно так, и почему это работает.

Eesoos
Т.е. по примеру выше мне в целом всё ясно, а вот п...

Для типов "указатель на структуру" оператор "точка" определен как "доступ к полю". Что именно вызывает недоумение?

Eesoos- Автор вопроса
Daniel Podolsky
Для типов "указатель на структуру" оператор "точка...

Т.е. у меня e.Query - это грубо говоря разыменовывание?

Eesoos
Т.е. у меня e.Query - это грубо говоря разыменовыв...

Меня тоже во время изучения указателей в го это смущало

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта