Cómo establecer valores predeterminados en estructuras Go
Hay múltiples respuestas/técnicas para la siguiente pregunta:
- ¿Cómo establecer valores predeterminados para estructuras golang?
- Cómo inicializar estructuras en golang
Tengo un par de respuestas, pero se requiere más discusión.
Una posible idea es escribir una función constructora separada.
//Something is the structure we work with
type Something struct {
Text string
DefaultText string
}
// NewSomething create new instance of Something
func NewSomething(text string) Something {
something := Something{}
something.Text = text
something.DefaultText = "default text"
return something
}
Fuerza un método para obtener la estructura (la forma del constructor).
De esta publicación :
Un buen diseño es hacer que su tipo no se exporte, pero proporcionar una función de constructor exportada como
NewMyType()
en la que puede inicializar correctamente su estructura/tipo. También devuelva un tipo de interfaz y no un tipo concreto, y la interfaz debe contener todo lo que otros quieran hacer con su valor. Y su tipo concreto debe implementar esa interfaz, por supuesto.Esto se puede hacer simplemente haciendo que el tipo en sí no se exporte. Puede exportar la función NewSomething e incluso los campos Text y DefaultText, pero no exporte el tipo de estructura.
Otra forma de personalizarlo para su propio módulo es utilizar una estructura de configuración para establecer valores predeterminados (Opción 5 en el enlace). Aunque no es una buena manera.