Вы серьёзно спрашиваете сейчас? Почему NewUberServer не стоит делать методом UserServerParams?
Евгений, я вижу вы большой эксперт, но по делу пока ничего не сказали.
Именно по той причине что мне не совсем ясен кейс использования такого подхода я и задаю вопрос, коллега. А вот вы сейчас язвите вместо того что-бы сказать что-то по делу, ата-та-та.
Дак потому что вопрос странный, пишешь как это уместно в конкретной ситуации. Если ты используешь подход а-ля ООП тогда первый вариант, второй уместен например в патерне method factory
Я к другому Евгению обращался, сорри.
Ну вот я сразу привёл пример, где неуместно использовать методы — в "конструкторах" с параметрами, например. А ещё сразу спросил про ваш конкретный пример, потому что ответ на вопрос сильно зависит от контекста
а в каком кейсе и кому вообще может быть надо делать func method(s S) {} ? вместо очевидного func (s *S) method() {}
У меня тут целый проект и контекстов будет много и разных. И это такой общий вопрос. Вот думаю придумать правило, что функции отдельно, для случаев когда в них нет сайд-эффектов. А экстеншен функции - с сайд эффектами.
если метод логически принадлежит структуре, нет ни одной причины не делать func (s *S) method() {}
Сейчас подумал, что отдельная функция пригодиться на случай утиной типизации.
Откуда вот это "экстеншен-функции" взялось? В го методы и функции. Лучше спросить про каждый пример, а потом начнёте чувствовать где правильно, а где нет. Если вам хочется принцип универсального (которого нет, конечно же), то лучше вот взять у товарища @LazarenkoAN: если место в коде требует объектно-ориентированного подхода, то лучше методы, а если функциональный — то лучше функции. Ваш совсем нерабочий. Вот, например, у вас Bill, нужно по его описанию сгенерить сумму. Это чистая функция, но логично сделать её методом, потому что это неотъемлимое свойство самого счёта
есть такой антипаттерн - изобретение квадратного колеса
Ммм, т.е. вот так? type UserRepoParams{ logger log.Logger conn db.Conn } func (rp RepoParams) NewUserRepo() (*UserRepo, error) { } Выглядит это очень странно, если честно
речь была про методы, не про конструктор
Речь шла о том чем методы отличаются от функций и где нужно одно, а где другое. Подход "всё делать методами" сомнителен
а, тогда у вас примеры не верные
Конечно неверные, потому что я показывают абсурдность подхода
Методы принадлежат структурам данных и оперируют их полями. Функции к структурам не относятся и оперируют собственными или поступающими в них данными. Есть структура данных и хотим производить с ней работу — используем методы. Есть просто кусок кода, который хотим использовать в нескольких местах — используем функцию. ИМХО
Обсуждают сегодня