golang构造函数示例

93 阅读1分钟
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)
}