¿Puede ir tener parámetros opcionales? ¿O puedo simplemente definir dos funciones con el mismo nombre y un número diferente de argumentos?
go
overloading
devyn
fuente
fuente
Respuestas:
Go no tiene parámetros opcionales ni admite la sobrecarga de métodos :
fuente
make
un caso especial, entonces? ¿O ni siquiera se implementa realmente como una función ...make
es una construcción de lenguaje y las reglas mencionadas anteriormente no se aplican. Ver esta pregunta relacionada .range
es el mismo caso quemake
, en ese sentidoUna buena manera de lograr algo como parámetros opcionales es usar argumentos variadic. La función en realidad recibe una porción del tipo que especifique.
fuente
params
es una porción dePuede usar una estructura que incluya los parámetros:
fuente
Para un número arbitrario y potencialmente grande de parámetros opcionales, un buen modismo es usar opciones funcionales .
Para su tipo
Foobar
, primero escriba solo un constructor:donde cada opción es una función que muta el Foobar. Luego, proporcione formas convenientes para que su usuario use o cree opciones estándar, por ejemplo:
Patio de recreo
Para ser concisos, puede dar un nombre al tipo de opciones ( Zona de juegos ):
Si necesita parámetros obligatorios, agréguelos como primeros argumentos del constructor antes de la variable
options
.Los principales beneficios de la idioma de opciones funcionales son:
Esta técnica fue acuñada por Rob Pike y también demostrada por Dave Cheney .
fuente
func()
s si fuera necesario, que doblar mi cerebro en torno a este enfoque. Cada vez que tengo que usar este enfoque, como en la biblioteca Echo, encuentro que mi cerebro queda atrapado en la madriguera de las abstracciones. #fwiwNi los parámetros opcionales ni la sobrecarga de funciones son compatibles con Go. Go admite un número variable de parámetros: pasar argumentos a ... parámetros
fuente
No, tampoco Según los documentos de Go para programadores de C ++ ,
No puedo encontrar una declaración igualmente clara de que los parámetros opcionales no son compatibles, pero tampoco son compatibles.
fuente
Puede encapsular esto bastante bien en una función similar a la que se muestra a continuación.
En este ejemplo, la solicitud por defecto tiene dos puntos y un espacio delante. . .
. . . sin embargo, puede anular eso proporcionando un parámetro a la función de solicitud.
Esto dará como resultado un mensaje como el siguiente.
fuente
Terminé usando una combinación de una estructura de parámetros y argumentos variados. De esta manera, no tuve que cambiar la interfaz existente que fue consumida por varios servicios y mi servicio pudo pasar parámetros adicionales según fue necesario. Código de muestra en el patio de juegos de Golang: https://play.golang.org/p/G668FA97Nu
fuente
Go language no admite la sobrecarga de métodos, pero puede usar argumentos variados al igual que los parámetros opcionales, también puede usar la interfaz {} como parámetro, pero no es una buena opción.
fuente
Llego un poco tarde, pero si te gusta la interfaz fluida, puedes diseñar tus setters para llamadas encadenadas como esta:
Y luego llámalo así:
Esto es similar al lenguaje de opciones funcionales presentado en la respuesta @Ripounet y disfruta de los mismos beneficios, pero tiene algunos inconvenientes:
err
variable y poniéndola a cero.Sin embargo, existe una pequeña ventaja posible, este tipo de llamadas a funciones debería ser más fácil para el compilador en línea, pero realmente no soy un especialista.
fuente
Puede pasar parámetros nombrados arbitrarios con un mapa.
fuente
Otra posibilidad sería utilizar una estructura que con un campo para indicar si es válida. Los tipos nulos de sql como NullString son convenientes. Es bueno no tener que definir su propio tipo, pero en caso de que necesite un tipo de datos personalizado, siempre puede seguir el mismo patrón. Creo que la opcionalidad está clara en la definición de la función y hay un mínimo de código o esfuerzo adicional.
Como ejemplo:
fuente