package main
import "fmt"
type Student struct {
Id int
Name string
}
type StudentFunc func(student *Student)
type StudentFuncs []StudentFunc
func (sfs StudentFuncs) apply(s *Student) {
for _, sf := range sfs {
sf(s)
}
}
func NewStudentId(id int) StudentFunc {
return func(s *Student) {
s.Id = id
}
}
func NewStudentName(name string) StudentFunc {
return func(s *Student) {
s.Name = name
}
}
func NewStudent(sf ...StudentFunc) *Student {
s := new(Student)
StudentFuncs(sf).apply(s)
return s
}
func main() {
s := NewStudent(
NewStudentId(1),
NewStudentName("gz"),
)
fmt.Println(s)
}