Может ли Go иметь дополнительные параметры? Или я могу просто определить две функции с одинаковым именем и разным количеством аргументов?
go
overloading
Devyn
источник
источник
Ответы:
Go не имеет необязательных параметров и не поддерживает перегрузку методов :
источник
make
особый случай? Или это даже не реализовано как функция ...make
является языковой конструкцией, и упомянутые выше правила не применяются. Смотрите этот связанный вопрос .range
это тот же случайmake
, что и в этом смыслеХороший способ получить что-то вроде необязательных параметров - это использовать переменные аргументы. Функция фактически получает фрагмент любого типа, который вы укажете.
источник
params
это кусочек целыхВы можете использовать структуру, которая включает параметры:
источник
Для произвольного, потенциально большого количества необязательных параметров, хорошая идиома - использовать функциональные опции .
Для вашего типа
Foobar
сначала напишите только один конструктор:где каждая опция - это функция, которая мутирует Foobar. Затем предоставьте пользователю удобные способы использования или создания стандартных параметров, например:
Игровая площадка
Для краткости вы можете дать название типу опций ( Playground ):
Если вам нужны обязательные параметры, добавьте их в качестве первых аргументов конструктора перед переменным
options
.Основными преимуществами функциональных опций являются:
Эта техника была придумана Робом Пайком, а также продемонстрирована Дейвом Чейни .
источник
func()
случае необходимости, чем это искажает мой разум вокруг этого подхода. Всякий раз, когда мне приходится использовать этот подход, например, с библиотекой Echo, я обнаруживаю, что мой мозг попадает в кроличью нору абстракций. #fwiwНи необязательные параметры, ни перегрузка функций не поддерживаются в Go. Go поддерживает переменное число параметров: передача аргументов ... параметрам
источник
Нет - ни Для Go для программистов C ++ документы,
Я не могу найти столь же ясное утверждение, что необязательные параметры не поддерживаются, но они также не поддерживаются.
источник
Вы можете инкапсулировать это довольно красиво в функции, аналогичной приведенной ниже.
В этом примере подсказка по умолчанию содержит двоеточие и пробел перед ним. , ,
, , , однако вы можете переопределить это, передав параметр в функцию подсказки.
Это приведет к подсказке, как показано ниже.
источник
В итоге я использовал комбинацию структуры params и variadic args. Таким образом, мне не пришлось менять существующий интерфейс, который использовался несколькими сервисами, и мой сервис мог передавать дополнительные параметры по мере необходимости. Пример кода на игровой площадке Golang: https://play.golang.org/p/G668FA97Nu
источник
Язык Go не поддерживает перегрузку методов, но вы можете использовать переменные аргументы так же, как необязательные параметры, также вы можете использовать интерфейс {} в качестве параметра, но это не лучший выбор.
источник
Я немного опоздал, но если вам нравится свободный интерфейс, вы можете создать сеттеры для цепных вызовов, например:
И затем назовите это так:
Это похоже на идиому « Функциональные параметры», представленную в ответе @Ripounet, и обладает теми же преимуществами, но имеет некоторые недостатки:
err
переменную и обнуляющую ее.Однако, есть небольшое преимущество: вызовы функций такого типа должны быть проще для встроенного компилятора, но я действительно не специалист.
источник
Вы можете передать произвольные именованные параметры с картой.
источник
Другая возможность - использовать структуру с полем, чтобы указать, является ли она действительной. Нулевые типы из sql, такие как NullString , удобны. Приятно, что вам не нужно определять свой собственный тип, но в случае, если вам нужен собственный тип данных, вы всегда можете следовать одному и тому же шаблону. Я думаю, что необязательность понятна из определения функции и требует минимального дополнительного кода или усилий.
Например:
источник