Denis
у вас будет масса проблем, при такой "универсализации", стоит сразу переделывать
ну вообще проблема же действительно существует. если ты будешь везде писать slice.Sort() и в куче-куче мест такое будет, и вдруг алгоритм этой выборки меняется, ты будешь по всему коду бегать искать
Илья
так можно функцию сортировки в одном месте хранить
Denis
ну я и говорил об этом. хотя бы функцию саму попытаться универсальной сделать, в одном месте написать
Denis
но все равно решение такое себе. а если не 5 элементов а 6 понадобится выбирать - предлагаешь еще и константу общую завести?)
Илья
я просто не понимаю - на входе - слайс структур, на выходе - слайс структур, если далее идет работа с конркетными типами, то будет сборка слайса до этой функции, и type switch/type assert после, это ж треш какой-то
Alexandr
Интерфейс это отличное решение но меня смущают аксессоры, в го коде это будет странно выглядить. Интерфейс с 10 аксесорами, при рекомендация делать интерфейсы минимальными)
Denis
да это тоже не вариант, понятно
Denis
более того тут недавно в этом же чатике обсуждали проблему, что слайс интерфейсного типа не соотвествует слайсу структур, который этот интерфейс реализует
Denis
так что если func f(s []Interface{}) ты в нее не передаешь f([]struct{}) которые его реализуют предварительно не отконвертировав
Denis
если ты сделаешь функцию, которая на вход принимает слайс интерфейсов, то будешь вынужден каждый раз перед вызовом приводить свой слайс к этому интерфейсу
Alexandr
Это да, но приведение типа будет уже там где будет получен результат работы алгоритма
arisudesu
его можно реализовать методами
Denis
https://play.golang.org/p/P0nW-qPY_0n
arisudesu
надеюсь уже понятно к чему я веду.
Roman
а с интерфейсом содержащим геттеры и сеттеры, все сводится к добавлению методов
не надо геттеры и сеттеры. интерфейс может быть равен нескольким полям по сути. заведи на один набор один интерфейс с неэкспортируемым методом, на другой - другой, и проверяй кастование. а в структуры встрой псевдоабстрактные неэкспортируемые структуры, которые удовлетворят соответствующим интерфейсам.
Илья
Это да, но приведение типа будет уже там где будет получен результат работы алгоритма
для вызова вашей функции, придется пересобирать слайсы, на выходе из вашей функции, придется заниматься type assert, еще раз - вам должно хватать функции сортировки и сабслайса
Denis
я бы предложил сделать наоборот. делаешь интерфейс который может получать топ5: type Top5 interface { GetTop5() } реализуешь его на всех слайсах нужных тебе структур type some []struct{} func (s some) GetTop5() { // magic here }
Denis
но один черт не понятно какой возвращаемый тип у GetTop5
Denis
т.е. делай не абстрактную функцию, которая принимает что угодно. лучше сделай у каждого слайса свою реализацию, а потом это в иинтерфейс объедини чтобы каждый слайс можно было абстрактно использовать. кажется правильным решением но чето не понятно с возвращаемым типом
Denis
https://play.golang.org/p/kaAUkI4VHUU
Alexandr
Неужели это редкий кейс) и нет рекомендаций go way где нибудь в доках)
arisudesu
тебе надо задачу решать, а не придерживаться идиоматик го
Илья
если бы ты накидал какой-то пример, можно было бы чем-то помочь, а так, звучит как неправильный подход
Vladislav
Неужели это редкий кейс) и нет рекомендаций go way где нибудь в доках)
Так вам же по факту сортировка и обрез слайса нужен.
Vladislav
Посмотрите на sort.
Илья
но один черт не понятно какой возвращаемый тип у GetTop5
для таких костылей (если там еще и заполнение какое- то происходит) стоит делать inplace и возвращать разве что ошибку
Alexandr
Так вам же по факту сортировка и обрез слайса нужен.
Сортировка это очень натянуть, алгоритм будет сложнее
Alexandr
Конечно, не должна
Почему? Считаете надо взглянуть с другой стороны?
Алексей
https://play.golang.org/p/tb573yibm6e как вывести только второе слово заглавными буквами ??
Vladislav
Сортировка это очень натянуть, алгоритм будет сложнее
В смысле. Вы топ 5 собираетесь сравнивая структуры выводить? Или что еще?
Alexandr
Сейчас доберусь до компа опишу подробные требования
Daniel
Почему? Считаете надо взглянуть с другой стороны?
Если у вас 10 типов, требующих однотипной обработки - надо написать/сгенерировать 10 методов, эту обработку реализующих
Alexandr
Если у вас 10 типов, требующих однотипной обработки - надо написать/сгенерировать 10 методов, эту обработку реализующих
Ок, спасибо, учту) давненько начал замечать что многое в го стоит сделать с помощью кодогенерации
Daniel
Ну - генериков-то нет...
Daniel
Если это на самом деле один тип - надо одним типом и представить
Daniel
Как вариант - это 10 типов, релизующих один интерфейс, но тут опять надо генератор геттеров писать...
Vladislav
Не выходит !
-_- https://play.golang.org/p/uDMw427htp6
Васильев Виктор
-_- https://play.golang.org/p/uDMw427htp6
Ну почти) Он сказал вроде ТОЛЬКО второе слово
Илья
i == 1 ? :D
Васильев Виктор
Или без цикла)
Васильев Виктор
Зачем бегать по всему массиву)
Vladislav
Ну почти) Он сказал вроде ТОЛЬКО второе слово
Ну код сильно лень менять. Просто иллюстрация. Так-то нужно длину проверить и без цикла все сделать.
Васильев Виктор
Ага :) Просто проверить длинну и выбрать элемент 1 toUpper и потом склеить
Алексей
А как проверить длина и склеить??
Илья
хороший вопрос, и вам в golang tour https://tour.golang.org/welcome/1
heavycharged
в чем суть задачи-то?
heavycharged
вывести второе слово из предложения заглавными буквами?
Алексей
Понятно,л спасибо!
heavycharged
https://play.golang.org/p/E2tvOLWaSar
heavycharged
лучше юзать strings.Fields
heavycharged
хотя, если вам нужно сохранить количество пробелов между словами, тогда Split подойдет
heavycharged
Fields разбивает по одному и более пробелу.
Васильев Виктор
Ну просто уточнений не было так что по умолчанию думается сохранить строку в первозданном виде
heavycharged
ну тогда нужно итерироваться по слайсу начиная с первого элемента, и выше, проверяя, не является ли элемент слайса пустой строкой, так как в задаче имеется ввиду второе слово. но это уже тошнотик мод.
Мерль
Кто сегодня будет на митапе?
Васильев Виктор
в дефолт сити?
Altay unstppbl
А давайте 17го :)
Altay unstppbl
15,16 на phdays идёт кто?
Yura
Сорри за нубский вопрос: чем сейчас сообщество версии библиотек менеджат? Требуется кардинальная переработка api в либе. Под что подстраиваться, чтобы меньше боли пользователям было? т.е. чтобы и старую версию могли использовать.
Daniel
вопрос не ясен
Васильев Виктор
гит версии
Васильев Виктор
или теги
Yura
вопрос не ясен
Есть либа. Её уже используют. Нужно сделать v2 с не совместимым api. Но чтобы пользователи текущей версии могли её продолжать использовать с минимальным напрягом. На что следует ориентироваться? Считать, что все пользуются dep и морозят коммиты? Сделать бранч v1? Или воспользоваться gopkg.in ?
Васильев Виктор
Или воттак
Васильев Виктор
http://labix.org/gopkg.in
Васильев Виктор
Так приятнее
Васильев Виктор
ну собственно gopkg.in использует и бранчи так что можно совмещать)
Yura
бранч, конечно
Бранч просто (с расчётом на dep)? Или связаться с gopkg.in ?
Васильев Виктор