Нет другого способа проверить, установлено ли какое-либо значение или нет, не сравнивая вручную каждое поле структуры.
Именно поэтому в stdlib
во многих пакетах есть методы New...
.
Например, bufio.NewWriter()
, где автор пакета позаботится об инициализации структуры с некоторыми нормальными значениями по умолчанию в соответствии с собственным вариантом использования.
// NewStudent returns new Student instance
func NewStudent() *Student {
return &Student{Name: "defaultName", No: 7}
}
Даже если тип Student
экспортирован, предполагается, что пользователи вашего пакета должны использовать New...
для использования любой структуры.
Существует и другой способ решения этой проблемы, но он может быть слишком сложным для многих программ, но вы можете прочитать о них здесь и здесь .