Size: a a a

2020 June 21

S

Serj in Go-go!
подскажите, пожалуйста, есть из доки кусок:
type T struct{}
var _ I = (*T)(nil) // Verify that *T implements I

что за прикол с (nil)? что это за вызов? он ни в го туре, ни в любой другой доке не описан. но часто вижу в исходниках
источник

ВС

Владимир Столяров... in Go-go!
Это приведение nil к типу *T
источник

S

Serj in Go-go!
Владимир Столяров
Это приведение nil к типу *T
а как эта штука называется? я почитать хочу.
что это "приведение к типу *Т" мне пока ничего не говорит. с интерфейсами пару дней разбираюсь. ужасная тема в го
источник

E

Evgeny in Go-go!
Serj
а как эта штука называется? я почитать хочу.
что это "приведение к типу *Т" мне пока ничего не говорит. с интерфейсами пару дней разбираюсь. ужасная тема в го
Type assertions
источник

SK

Savely Krasovsky in Go-go!
Serj
а как эта штука называется? я почитать хочу.
что это "приведение к типу *Т" мне пока ничего не говорит. с интерфейсами пару дней разбираюсь. ужасная тема в го
не понимаю чего сложного в интерфейсах гошных
источник

SK

Savely Krasovsky in Go-go!
многим становится легче, если представить, что структура в го это эдакий класс
источник

S

Serj in Go-go!
Evgeny
Type assertions
так она через точку должна работать, разве нет?
источник

S

Serj in Go-go!
Savely Krasovsky
многим становится легче, если представить, что структура в го это эдакий класс
структура - понятно.
интерфейс - шляпа полнейшая просто
источник

SK

Savely Krasovsky in Go-go!
Serj
структура - понятно.
интерфейс - шляпа полнейшая просто
так в других ООП языках интерфейсы тоже есть
источник

SK

Savely Krasovsky in Go-go!
написал класс, который реализует интерфейс и поехали
источник

E

Evgeny in Go-go!
Serj
подскажите, пожалуйста, есть из доки кусок:
type T struct{}
var _ I = (*T)(nil) // Verify that *T implements I

что за прикол с (nil)? что это за вызов? он ни в го туре, ни в любой другой доке не описан. но часто вижу в исходниках
Конкретно здесь берется nil и используется в качестве указателя на структуру T для присвоения в переменную _, которая должна содержать интерфейс I. Таким образом статически проверяется, что T реализует I.
источник

S

Serj in Go-go!
Savely Krasovsky
так в других ООП языках интерфейсы тоже есть
в других они нормально сделаны)
тут же имплемент через попу сделан, фиг пойми как
источник

SK

Savely Krasovsky in Go-go!
Serj
в других они нормально сделаны)
тут же имплемент через попу сделан, фиг пойми как
так тут просто нет слово extends, оно само срабатывает, когда ты удовлетворяешь условия
источник

SK

Savely Krasovsky in Go-go!
это немного непривычно на первый вгляд
источник

ВС

Владимир Столяров... in Go-go!
Serj
в других они нормально сделаны)
тут же имплемент через попу сделан, фиг пойми как
Тут нету явной реализации интерфейсов
источник

SK

Savely Krasovsky in Go-go!
но я бы не назвал это "через жопу"
источник

E

Evgeny in Go-go!
Serj
в других они нормально сделаны)
тут же имплемент через попу сделан, фиг пойми как
Это называется "утиная типизация" и в том или ином виде сейчас встречается везде, в том же питоне. Если в твоём пехапе этого нет - это не значит, что везде так.
источник

E

Evgeny in Go-go!
Структурная типизация, короч.
источник

S

Serj in Go-go!
Evgeny
Конкретно здесь берется nil и используется в качестве указателя на структуру T для присвоения в переменную _, которая должна содержать интерфейс I. Таким образом статически проверяется, что T реализует I.
спасибо за развернутый ответ) попытаюсъ вдуплить
источник

E

Evgeny in Go-go!
Serj
подскажите, пожалуйста, есть из доки кусок:
type T struct{}
var _ I = (*T)(nil) // Verify that *T implements I

что за прикол с (nil)? что это за вызов? он ни в го туре, ни в любой другой доке не описан. но часто вижу в исходниках
Чуть по-другому можно переписать это в таком виде:
var _ I = &T{}, только без приколов с кастами.
источник