Golang使用Option设计模式优雅处理可选参数

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}
posted @   朝阳1  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示