美文网首页
函数实现默认参数

函数实现默认参数

作者: kker | 来源:发表于2016-12-30 15:49 被阅读1100次

Go 本身,定义函数时不支持默认参数,但有时候,构建对象时需要的参数较多,有些确实不需要每次都指定,这时候如果可以实现,创建对象只传递自己需要定制的参数会方便很多。

曲线救国

我们可以将该函数定义成参数数量可变函数,可变参数为函数对象,这些函数用来设定我们需要的字段的值
例子如下:

var defaultStuffClient = stuffClient{
    retries: 3,
    timeout: 2,
}
type StuffClientOption func(*stuffClient)
func WithRetries(r int) StuffClientOption {
    return func(o *stuffClient) {
        o.retries = r
    }
}
func WithTimeout(t int) StuffClientOption {
    return func(o *stuffClient) {
        o.timeout = t
    }
}

type StuffClient interface {
    DoStuff() error
}
type stuffClient struct {
    conn    Connection
    timeout int
    retries int
}

type Connection struct{}
func NewStuffClient(conn Connection, opts ...StuffClientOption) StuffClient {
    client := defaultStuffClient
    for _, o := range opts {
        o(&client)
    }
    
    client.conn = conn
    return client
}
func (c stuffClient) DoStuff() error {
    return nil
}

参考原文:Functional Options Pattern in Go

相关文章

  • 函数提高

    函数的默认参数 如果声明中有默认函数,那实现中就不能有默认参数 函数的占位参数 函数重载 函数名相同,提高复用性 ...

  • 函数实现默认参数

    Go 本身,定义函数时不支持默认参数,但有时候,构建对象时需要的参数较多,有些确实不需要每次都指定,这时候如果可以...

  • Swift函数

    概览函数定义隐式返回返回元组(实现多值返回)函数参数参数标签默认参数值可变参数输入输出参数函数重载内联函数函数类型...

  • ES6-默认参数和rest参数

    默认参数在ES5中没有提供直接在函数的参数列表中指定参数默认值的语法,想为函数参数指定默认值,一般通过如下方式实现...

  • 函数的扩展

    1、函数参数的默认值 在es6之前,不能直接为函数的参数指定默认值,但是可以通过变通的方法实现,以下为实现方法: ...

  • ES6 函数默认参数、rest运算符(扩展运算符)剩余参数

    一.函数默认参数 1.旧函数默认参数写法 2.新函数默认参数写法 二.函数参数默认已经定义了,不能再使用let,c...

  • 构造函数 析构函数 拷贝赋值(GeekBand)

    1、默认构造函数 默认构造函数是没有参数的函数。另外,默认构造函数也可以在参数列表中以参数默认值的方式声明。默认构...

  • 1.0 C++远征:函数参数默认值、函数重载、内联函数

    C++远征 [TOC] 一、函数参数默认值 1.函数参数默认值的声明 2.函数参数默认值的定义 3.函数参数默认值...

  • js中函数柯里化(currying)

    函数柯里化就是创建已经设置单个参数或者多个参数的函数,函数变为接受一个参数,返回一个值, 1,实现 默认下为参数复...

  • Python 函数

    调用函数 定义函数 函数的参数必选参数、默认参数、可变参数、关键字参数、命名关键字参数 位置参数 默认参数 可变参...

网友评论

      本文标题:函数实现默认参数

      本文链接:https://www.haomeiwen.com/subject/qxvmvttx.html