🏁Александр
если мне память не изменяет, в С++ мы бы уже отхватили
🏁Александр
за такие вольности
🏁Александр
поинтеры есть поинтеры
Vladislav
Омг. И что?
Vladislav
Какую проблему оно создает?
🏁Александр
слишком сладкий сахар, можно диабет подхватить 🙂
🏁Александр
Какую проблему оно создает?
вернемся к примеру: r := &Rabbit{AbstractAnimal{Name:"Bunny", Gender: true},12} s := &Snake{AbstractAnimal{Name:"Kaa", Gender: false}, 50} animals := []AnimalInterface{r,s} и теперь расскажите мне, при проходе по AnimalInterface у нас там что будет, поинтеры или структуры?
иьг71
вот за такое стойбище кроликов, нам по рукам надают
для повышения общей грамотности, можно корректный пример?
🏁Александр
для повышения общей грамотности, можно корректный пример?
r1 := &Rabbit{AbstractAnimal{Name:"Bunny", Gender: true},12} r2 := &Rabbit{AbstractAnimal{Name:"Bunny", Gender: true},12} animals := []*Rabbit{r1, r2}
Sergey
Воспринимай в данном случае интерфейс AnimalInterface как контракт
🏁Александр
а если этот метод пишет в структуру, надо знать мы в поинтере мы или в структуре. Иначе можно что-то испортить, если он случайно в другом месте используетс
Sergey
Если нечто выполняет этот контракт то ок
Sergey
И неважно будет это что-то принтером или нет
🏁Александр
так поинтер нихрена не может удолетворять
Vladislav
Почему?
🏁Александр
если только там не "магия" с разименовыванием
🏁Александр
потому что поинте блин это ссылка на память (в гоу не так)
Vladislav
Ну офигеть. А мы про что говорим?
Vladislav
🏁Александр
мы вот такие тупые, написали что-то такое -
🏁Александр
https://play.golang.org/p/3wARZ1Zhy8U
🏁Александр
обычно такое код после 3 часов ночи начинается 🙂
🏁Александр
и нихрена не подстрахует же
Vladislav
Так можно любой код с ошибкой написать и "нихрена не подстрахует же"
Oleksandr
скажите, а использовать reflect для решения такой задачи - негодно? https://play.golang.org/p/nQ2v8lY6cqD в принципе всё работает радует то что не нужно будет для каждого поля писать getter, но кажется как-то избыточно
Nurzhan
Чем интерфейс не устраивает?)
Oleksandr
потому что написать один GetName() это ещё норм, но написать для 20-30 полей - уже выходят простыни
Aleksandr
https://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go
Aleksandr
бенчи в го делать просто
🏁Александр
у него там зоопарк
🏁Александр
я предложил через type switch
🏁Александр
но он хочет универсальный
Vladislav
Так вы уверены, что вам нужны все?
Oleksandr
всё верно - хочу универсальный, и чтобы в случае редактирования мне надо было менять в одном месте, а не в нескольких; не все, - те которые в С++ я бы пометил как public как разделять в принципе понятно
Vladislav
Почему не так https://play.golang.org/p/5fbuPi5sDy5?
Nurzhan
а так? https://play.golang.org/p/mkYuwx_CU_M
Oleksandr
потому что за каждым полем придётся создавать ещё и getter
Nurzhan
,kby
Nurzhan
блин, то же самое)
Oleksandr
угу, ну я вроде понял - reflect решает, но при этом получаем просадку производительности, что нивелирует одно из основных преимуществ go
Vladislav
потому что за каждым полем придётся создавать ещё и getter
Так может вся функция, в которой в эти геты вызываете должна быть методом?
🏁Александр
вы что-то делаете не так, если он вам нужен
🏁Александр
в гоу приято все писать "руками"
Vladislav
Либо делаете анмаршалер.
🏁Александр
Либо делаете анмаршалер.
который использует рефлект? 🙂
Vladislav
Да.
Vladislav
В анмаршале самое место.
🏁Александр
Не правда :)
первые пол года разработки, правда! 🙂
Vladislav
Ну и подобных случаях.
Anonymous
первые пол года разработки, правда! 🙂
Вот, было не так давно. Есть у меня конфиг в yaml, в нем есть опция, и параметр может быть либо строкой, либо массивом строк. Самое место для reflect ))
🏁Александр
нет
🏁Александр
interface{} туда
Nikita
И тайп-свитч
🏁Александр
потом type switch
Anonymous
interface{} туда
У меня с ним что-то не сложилось
Anonymous
уже не помню что %)
Anonymous
Модифицируем конфиг, чтобы он всегда был массивом.
Не удобно же. Иногда там всего один параметр ...
Vladislav
Ну и поставите там скобки, все-го то.
Nurzhan
TIMTOWTDI :)
Vladislav
Зато сразу видно что можно много передать.
Anonymous
там выбор был между: foo: bar или foo: - bar
Anonymous
ИМХО, первый вариант читабельней
Vladislav
Но в первом неочевидно, что можно много.
Anonymous
это очевидно из "контекста" самого конфига
Vladislav
Еще есть один хак. Ща нарисую.