首页 > 其他分享 >go-选项卡模式

go-选项卡模式

时间:2023-06-29 23:12:31浏览次数:39  
标签:选项卡 Name UserOptions int Age 模式 func go options

package main

import "fmt"

const (
    defaultName string = "张建平"
    defaultAge  int    = 27
    defaultHigh int    = 175
)

type User struct {
    Name string
    Age  int
    High int
}

type UserOptions struct {
    Name string
    Age  int
    High int
}

type UserOption interface {
    apply(*UserOptions)
}

type FuncUserOption struct {
    f func(*UserOptions)
}

func (fo FuncUserOption) apply(option *UserOptions) {
    fo.f(option)
}

func WithName(name string) UserOption {
    return FuncUserOption{
        f: func(options *UserOptions) {
            options.Name = name
        },
    }
}

func WithAge(age int) UserOption {
    return FuncUserOption{
        f: func(options *UserOptions) {
            options.Age = age
        },
    }
}

func WithHigh(high int) UserOption {
    return FuncUserOption{f: func(options *UserOptions) {
        options.High = high
    }}
}

func NewUser(opts ...UserOption) *User {
    options := UserOptions{
        Name: defaultName,
        Age:  defaultAge,
        High: defaultHigh,
    }
    for _, opt := range opts {
        opt.apply(&options)
    }
    return &User{
        Name: options.Name,
        Age:  options.Age,
        High: options.High,
    }
}

func main() {
    u1 := NewUser()
    fmt.Println(u1)
    u2 := NewUser(WithName("胖虎"))
    fmt.Println(u2)
    u3 := NewUser(WithName("喵"), WithAge(3))
    fmt.Println(u3)
}

 

标签:选项卡,Name,UserOptions,int,Age,模式,func,go,options
From: https://www.cnblogs.com/52-qq/p/17515434.html

相关文章

  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端
    前言前面的章节我们介绍了一些值得推荐的BlazorUI组件库,通过该篇文章的组件库介绍最终我选用AntDesignBlazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过AntDesignVue、AntDesignAngular习惯并且喜欢AntDesign设计规范和风格,废话不多说今天我......
  • 储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式 储能系统双向DCDC变换器蓄电
    储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式和boost模式,依靠蓄电池充放电维持直流母线电压平衡以某仿真为例子:文件下载后放到电脑桌面,注意不要自己新建文件夹再放入。将MATLAB工作目录设置为desktop,即桌面点击这......
  • MongoDB索引Index
    MongoDB索引Index索引概述索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对应用的性能是非常致命的创......
  • celery 之 celery介绍架构和安装、celery执行异步任务、包结构celery、celery执行
    目录一、celery介绍架构和安装1、celery:分布式的异步任务框架,主要用来做:2、celery框架,原理3、celery架构4、安装celery5、celery不支持win,所以想再win上运行,需要额外安装eventlet二、celery执行异步任务基本使用1再虚拟环境中装celery和eventlet2写个py文件,实例化得到app对象......
  • MongoDB聚合操作之排序、分页
    聚合操作之排序、分页管道命令之$sort$sort用于将输入的文档排序后输出使用示例如下:查询人物,按照年龄升序db.person.aggregate([{$sort:{age:1}}])查询每个国家的人数,并排序db.person.aggregate([{$group:{_id:"$country",counter:{$sum:1}}},{$sort:{count......
  • 11celery介绍架构和安装,celery执行异步任务,包结构celery,celery执行延迟任务和定时任务
    1celery介绍架构和安装#celery:分布式的异步任务框架,主要用来做: -异步任务-延迟任务-定时任务---》如果只想做定时任务,可以不使用celery,有别的选择#celery框架,原理1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)2)celery服务为为其他项目......
  • 紫光fpga logos2 pango design 开发工具 黑金 axp100开发板资料
    紫光fpga logos2 pangodesign开发工具黑金axp100开发板资料带ddr以及高速收发器例子有双相机采集存储ddr后进行hdmi输出叠加显示的工程包含1多个例子工程    2ddr与hsst ip    3ddr使用手册    4例子工程教程原创文章,转载请说明......
  • 吐槽之Goldendb
    一本正经de胡说八道:国产数据库Goldendb 先来一个带有个人极度偏见的结论:这年头还忽悠着让别人上Goldendb的,不是蠢,就是坏。依据Goldendb高、大、上的定位,纯粹就是一个小马拉大车,研发能力根本匹配不了定位、使命与发展。Goldendb的崛起与发展,得益于N年前大热的分布式数据库,彼时......
  • c++实现装饰器模式
    1、构建基本类的抽象#include<iostream>classIComponent{public:virtualvoidOperate()=0;private:};2、构建基本类classComponent:publicIComponent{public:voidOperate()override{std::cout<<"基础操作......
  • Kubernetes编程——client-go基础—— 深入 API Machinery —— Kind
    深入APIMachinery——Kind 在Kubernetes中,APIMachinery是一个核心的软件库,用于构建Kubernetes的API服务器和控制器。它提供了一些基本的功能,如对象存储、认证鉴权、API请求处理和验证等。 在APIMachinery中,Kind是一个重要的概念。在Kubernetes中,每个资源......