首页 > 其他分享 >Golang使用Option设计模式优雅处理可选参数

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

时间:2024-08-17 10:27:14浏览次数:13  
标签:foo Option age Golang User func 设计模式 name

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

相关文章

  • 设计模式---构建者模式(Builder Pattern)
    构建者模式(BuilderPattern)是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象,这些对象由多个部分组成或具有多个可选属性。构建者模式的核心要素:Builder(构建者):定义构建对象的接口,声明创建部......
  • 【Java Lambda系列】新玩法,用Lambda重构设计模式
    前言前面三章通过理论+案例的方式对Lambda的描述,应该能基本上解决大家日常开发中所遇到的Lambda问题,为了更好的展现Lambda魅力,和加深巩固Lambda知识点,今天咱们讨论Lambda如何重构设计模式!关于设计模式众所周知,设计模式是一群大佬程序员将对程序设计的经验归纳总结起来的......
  • golang json inline用法
    packagemainimport( "encoding/json" "fmt")typeProjectstruct{ Keystring`json:"key"` Valuestring`json:"value"`}typeJiraHttpReqFieldstruct{ Project`json:",inline"` Summarystring`jso......
  • 区块链编程-golang(三)
    文件目录主文件下有文件blockchain、go.mod、gosum、文件tmp、main.go文件blockhain下面有block.go、blockchain.go、proof.go part1:block.gopackageblockchainimport("bytes""encoding/gob""log")typeBlockstruct{Hash[]b......
  • 掌握Golang的html/template:打造动态网页的秘籍
    掌握Golang的html/template:打造动态网页的秘籍在Web开发的世界中,动态内容的生成是至关重要的。Golang以其简洁高效的特性,成为了后端开发的热门选择。而html/template包,则是Golang中用于创建HTML模板的官方工具,它不仅安全,而且功能强大。本文将带领你深入了解如何使用html/te......
  • 高级java每日一道面试题-2024年8月15日-设计模式篇-设计模式与面向对象原则的关系是什
    如果有遗漏,评论区告诉我进行补充面试官:设计模式与面向对象原则的关系是什么?我回答:在设计模式与面向对象原则的关系中,两者紧密相连且相互促进。面向对象的原则为设计模式的形成提供了理论基础和指导思想,而设计模式则是这些原则在特定问题域中的具体实践和实现方式。下......
  • 设计模式实战:内容管理系统的设计与实现
    系统功能需求内容创建:支持多种内容类型的创建,如文章、页面、媒体等。内容管理:提供灵活的管理策略,如按时间发布、按用户分组显示等。内容发布:根据不同的策略发布内容,如即时发布、定时发布等。设计分析建造者模式建造者模式用于创建复杂对象,通过逐步构建内容对象的各......
  • 设计模式(单例模式)
    概念单例模式(SingletonPattern)是指确保一个类在一个容器下只有一个实例存在,并提供一个全局访问点。单例模式最大的特点就是构造方法私有化。通常情况下,可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的方法就是让类自身负责保存它的唯一实例。......
  • 面试官:JDK中都用了哪些设计模式?
    设计模式是前辈们经过实践验证总结的解决方案,帮助我们构建出更具可维护性、可扩展性和可读性的代码。当然,在面试的过程中,也会或多或少的被问到。那么今天,我们就来看一道设计模式中的常见面试问题:JDK中都用了哪些设计模式?我按照大家比较熟悉且好理解的方式,把JDK中使用的设计模......
  • 推荐项目:安企CMS - 一款使用 GoLang 开发的企业内容管理系统
    安企内容管理系统(AnqiCMS),是一款基于iris框架,使用GoLang开发的企业内容管理系统。https://gitcode.com/anqicms/anqicms/overview推荐理由安企内容管理系统(AnqiCMS),是一款基于iris框架,使用GoLang开发的企业内容管理系统。它部署简单,软件相对于传统的PHP开发......