go语言不像其他语言函数的参数可以设置默认值
以下是参考第三方库的写法
package main
import "fmt"
type User struct {
name string
age int
id int
}
// Option 代表可选参数
type Option func(foo *User)
// WithName 为 name 字段提供一个设置器
func WithName(name string) Option {
return func(foo *User) {
foo.name = name
}
}
// WithAge 为 age 字段提供一个设置器
func WithAge(age int) Option {
return func(foo *User) {
foo.age = age
}
}
// NewUser 创建 User 实例的构造函数,id为必传参数,其他为可选
func NewUser(id int, options ...Option) *User {
foo := &User{
name: "default",
age: 10, //默认值,可以不写
id: id,
}
// 遍历每个选项并应用它们
for _, option := range options {
option(foo)
}
return foo
}
func main(){
// 使用 Option 模式,仅传递需要设置的字段
foo := NewUser(1, WithAge(15), WithName("张三"))
fmt.Println(foo)
}
输出
&{张三 15 1}
标签:foo,Option,age,Golang,User,func,设计模式,name
From: https://www.cnblogs.com/qcy-blog/p/18364099