poner - Valor predeterminado en el método de Go
poner imagen en django (3)
NO, pero hay algunas otras opciones para implementar el valor predeterminado. Hay algunas buenas publicaciones de blog sobre el tema, pero aquí hay algunos ejemplos específicos.
Opción 1: la persona que llama elige usar valores predeterminados
// Both parameters are optional, use empty string for default value
func Concat1(a string, b int) string {
if a == "" {
a = "default-a"
}
if b == 0 {
b = 5
}
return fmt.Sprintf("%s%d", a, b)
}
Opción 2: Un solo parámetro opcional al final
// a is required, b is optional.
// Only the first value in b_optional will be used.
func Concat2(a string, b_optional ...int) string {
b := 5
if len(b_optional) > 0 {
b = b_optional[0]
}
return fmt.Sprintf("%s%d", a, b)
}
Opción 3: una estructura de configuración
// A declarative default value syntax
// Empty values will be replaced with defaults
type Parameters struct {
A string `default:"default-a"` // this only works with strings
B string // default is 5
}
func Concat3(prm Parameters) string {
typ := reflect.TypeOf(prm)
if prm.A == "" {
f, _ := typ.FieldByName("A")
prm.A = f.Tag.Get("default")
}
if prm.B == 0 {
prm.B = 5
}
return fmt.Sprintf("%s%d", prm.A, prm.B)
}
Opción 4: Análisis completo de argumentos varicos (estilo javascript)
func Concat4(args ...interface{}) string {
a := "default-a"
b := 5
for _, arg := range args {
switch t := arg.(type) {
case string:
a = t
case int:
b = t
default:
panic("Unknown argument")
}
}
return fmt.Sprintf("%s%d", a, b)
}
¿Hay alguna manera de especificar el valor predeterminado en la función de Go? Estoy tratando de encontrar esto en la documentación pero no puedo encontrar nada que especifique que esto sea posible.
func SaySomething(i string = "Hello")(string){
...
}
No, los poderes de Google decidieron no apoyar eso.
https://groups.google.com/forum/#!topic/golang-nuts/-5MCaivW0qQ
No, no hay forma de especificar los valores predeterminados. Creo que esto se hace a propósito para mejorar la legibilidad, a costa de un poco más de tiempo (y, con suerte, pensamiento) al final del escritor.
Creo que el enfoque adecuado para tener un "valor predeterminado" es tener una nueva función que suministre ese valor predeterminado a la función más genérica. Al tener esto, tu código se vuelve más claro en tu intento. Por ejemplo:
func SaySomething(say string) {
// All the complicated bits involved in saying something
}
func SayHello() {
SaySomething("Hello")
}
Con muy poco esfuerzo, hice una función que hace algo en común y reutilicé la función genérica. Puede ver esto en muchas bibliotecas, fmt.Println
, por ejemplo, simplemente agrega una nueva línea a lo que fmt.Print
haría de otra manera. Sin embargo, al leer el código de alguien, está claro qué pretenden hacer con la función que llaman. Con los valores predeterminados, no sabré qué se supone que está sucediendo sin ir también a la función para hacer referencia a cuál es el valor predeterminado.