手把手教媳妇可变参数的应用场景

直观的常用的初始化一个结构体的方式大概是这样

func NewClient(url string,port int,password string,db int){
  return &Client{
        url:      url,
        port:     port,
        password: password,
        db:       db,
      //....
  }
}

如果后续加入了新的参数,那么这个api又得修改,而且不能很好的使用默认参数,如果是自己使用问题不太明显,如果是A写出来的提供给B调用,就得重新修改打包,这样不利于代码的升级和迭代,通过阅读一些其它的源码grpc-go也好,学到一种易于扩展的选项装配方式,下面列出来


type Client struct {
    url string
    port int
    password string
    db int
}

type option func(client *Client)

func WithUrl(url string) option {

    return func(client *Client) {

        client.url = url
    }
}

func WithPort(port int) option {

    return func(client *Client) {

        client.port = port
    }
}

func WithPassword(pwd string) option {

    return func(client *Client) {

        client.password = pwd
    }
}


func NewClinet(ops...option) *Client {

    c := &Client{
        url:      "localhost",
        port:     3306,
        password: "",
        db:       0,
    }
    for _,op := range ops{
        op(c)
    }
    return c
}

第二种方法,可以根据需要传递适合的参数个数,不传还能使用默认参数,更方便以后的扩展

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容