使用通过返回函数的方式(闭包和变长参数)来对值进行初始化,扩展性较强,也可以让代码更加优雅。
package main
import "fmt"
type User struct {
Name string
Age int
Height int
Weight int
}
type Option func(*User)
func (u *User) WithOption(opts ...Option) {
for _, opt := range opts {
opt(u)
}
}
func WithName(name string) Option {
return func(u *User) {
u.Name = name
}
}
func WithAge(age int) Option {
return func(u *User) {
u.Age = age
}
}
func WithHeight(h int) Option {
return func(u *User) {
u.Height = h
}
}
func WithWeight(w int) Option {
return func(u *User) {
u.Weight = w
}
}
func main() {
var u = User{
Name: "Jimmy",
Age: 10,
}
u.WithOption(WithHeight(123), WithWeight(70))
fmt.Println(u)
}
本文探讨了如何利用闭包和变长参数在`User`结构中实现可扩展的初始化选项,通过示例展示了如何通过WithOption函数灵活设置用户属性。这种设计使得代码简洁且易于维护。

被折叠的 条评论
为什么被折叠?



