go 基础加强-构造函数
- 技术栈

2.构造函数
package Object
type User struct {
Id,Sex int
Name string
}
//func NewUser() User {
// return User{}
//}
//有选择的对ID 进行赋值
func NewUser(f func(u *User))*User {
u:=new(User)
f(u)
return u
}
//返回的是函数本身 而不是函数的返回值
func WithUserID(id int) func(u *User) {
return func(u *User) {
u.Id=id
}
}
package main
func main() {
u:=Object.NewUser(
Object.WithUserID(200),
)
fmt.Println(u)
}
3.优化代码 可传变参
package Object
type User struct {
Id,Sex int
Name string
}
//func NewUser() User {
// return User{}
//}
//有选择的对ID 进行赋值
func NewUser(fs ...func(u *User))*User {
u:=new(User)
for _,f:=range fs{
f(u)
}
return u
}
//返回的是函数本身 而不是函数的返回值
func WithUserID(id int) func(u *User) {
return func(u *User) {
u.Id=id
}
}
func WithUserName(name string) func(u *User) {
return func(u *User) {
u.Name=name
}
}
func main() {
u:=Object.NewUser(
Object.WithUserID(200),
Object.WithUserName("xinyu"),
)
fmt.Println(u)
}
4.继续优化 容易理解
package Object
type UserAttrsFunc func(u *User)
//返回的是函数本身 而不是函数的返回值
type UserAttrsFuncs []UserAttrsFunc
func(this UserAttrsFuncs) apply(u *User) {
for _ ,f:=range this{
f(u)
}
}
func WithUserID(id int) UserAttrsFunc {
return func(u *User) {
u.Id=id
}
}
func WithUserName(name string) UserAttrsFunc {
return func(u *User) {
u.Name=name
}
}
package Object
import "fmt"
type User struct {
Id,Sex int
Name string
}
//func NewUser() User {
// return User{}
//}
//有选择的对ID 进行赋值
func NewUser(fs ...UserAttrsFunc)*User {
u:=new(User)
UserAttrsFuncs(fs).apply(u)
fmt.Printf("%T",fs)
return u
}
func main() {
u:=Object.NewUser(
Object.WithUserID(200),
Object.WithUserName("xinyu"),
)
fmt.Println(u)
}

浙公网安备 33010602011771号