首页 > 其他分享 >Go函数选项模式

Go函数选项模式

时间:2022-11-08 21:24:10浏览次数:43  
标签:选项 option User func Go Name Id 函数

type User struct {
    Id int
    Name string
}

type option func(*User)

func (u *User) Option(opts ...option) {
    for _, opt := range opts {
        opt(u)
    }
}

func WithId(id int) option {
    return func(u *User) {
        u.Id = id
    }
}

func WithName(name string) option {
    return func(u *User) {
        u.Name = name
    }
}

func main() {
    u1 := &User{}
    u1.Option(WithId(1))
    fmt.Printf("%+v\n", u1)
    
    u2 := &User{}
    u2.Option(WithId(1), WithName("frank"))
    fmt.Printf("%+v\n", u2)
}

输出结果:

&{Id:1 Name:}
&{Id:1 Name:frank}

阅读上面这段代码,我们可以发现,首先,我们定义一个名字是 option 的类型,它实际上是一个可以接收一个参数的函数。

然后,我们给 User 结构体定义一个 Option 方法,该方法接收我们定义的 option 类型的变长参数,方法体中使用 for-loop 执行函数。

定义 WithId 函数和 WithName 函数,设置 User 结构体的字段 Id 和字段 Name,该函数通过返回闭包的形式实现。

标签:选项,option,User,func,Go,Name,Id,函数
From: https://www.cnblogs.com/tracydzf/p/16871249.html

相关文章

  • 构建golang本地编译开发环境
    1构建golang开发环境FROMcentos:centos7.6.1810USERrootRUNyuminstall-ywget&&cd/usr/local/src&&wgethttps://studygolang.com/dl/golang/go1.16.3.linu......
  • django模板
    一、简介Django模板是使用Django模板语言标记的文本文档或Python字符串。模板引擎可以识别和解释一些结构。主要的是变量和标签。使用上下文呈现模板。渲染用它们的......
  • python 中 lambda函数
     Lambda函数用于创建匿名函数:001、>>>add1=lambdax:x+2>>>add1(100)102>>>add1(50)52 >>>abc=lambdax:x*2>>>abc(10)20>>>abc(0.8)1.6......
  • Kubernetes 落地案例|将 Pokémon Go 运行到谷歌云上
    背景知识:《PokémonGo》是由任天堂、Pokémon公司和谷歌NianticLabs公司联合制作开发的现实增强(AR)宠物养成对战类RPG手游。——百度百科这些年的工程师生涯中,......
  • python 中 format函数
     001、格式化数值>>>"{:.2%}".format(0.123456789)'12.35%'>>>"{:.5%}".format(0.123456789)'12.34568%'>>>"{:.2}".format(0.123456789)'0.12'>>>"{:.5}&quo......
  • django视图
    一、简介视图是Django应用程序中的一种网页“类型”,通常提供特定功能并具有特定模板,在Django中,网页和其他内容是通过视图传递的。每个视图都由一个Python函数(或方法......
  • python 中any 和 all函数
     001、 any只要一个结果为真,结果就为真>>>any([False,False,True])True>>>any([False,False,False])False  002、all只有所有结果为真才为真>>>......
  • 关于如何在Windows下通过Golang调用cmd指令
    太nm操蛋了,我tm弄了两小时。起因目前我的项目中,当并发量提高的时候会出现UDP的bufferqueuefull的情况,我怀疑是因为UDP端口释放太慢导致堆积。于是就打算用golang写一......
  • 编写函数,不允许创建临时变量,求字符串的长度。
    #include<stdio.h>#include<string.h>int my_strlen(char *str){intcount=0;//计算字符串的长度while(*str!='\0') //递归的条件,应该是if,但是if不能实现循环,所以whil......
  • python中数值处理函数
     001、abs函数取绝对值>>>abs(100)100>>>abs(-500)500  002、round函数取小数点位数>>>round(99.95)##默认没有小数点100>>>roun......