为了账号安全,请及时绑定邮箱和手机立即绑定

Go/可选参数中的多个构造函数?

Go/可选参数中的多个构造函数?

Go
烙印99 2023-06-19 15:23:36
我想知道是否有一种方法可以在 Go 中实现多个构造函数(具有相同的函数名称),就像在 Java 中一样。另一种选择可能是只有一个带有可选参数的构造函数,但我不确定该怎么做。type Query struct {    TagsQuery string    PageQuery string}// First Constructorfunc NewQuery(TagsQuery string) Query {    return Query{        TagsQuery: TagsQuery,        PageQuery: "0", // default to first page    }}// Second Constructorfunc NewQuery(TagsQuery string, PageQuery string) Query {    return Query{        TagsQuery: TagsQuery,        PageQuery: PageQuery,    }}第一个构造函数接受一个参数TagsQuery并默认PageQuery为0. 第二个构造函数有两个参数:TagsQuery和PageQuery。
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

在您的情况下,您可以只为可选PageQuery字段执行此操作,因为它是一个...参数,它将来可以接受更多:

type Query struct {

    TagsQuery string

    PageQuery string

}


// First Constructor

func NewQuery(TagsQuery string, options ...Option) Query {

    query := Query{

        TagsQuery: TagsQuery,

        PageQuery: "0", // default to first page

    }

    // Apply options if there are any, can overwrite default

    for _, option := range options {

        query = option(query)

    }

    return query

}


// Option definition

type Option func(Query) Query


// Function to create Option func to set pageQuery

func WithPageQuery(pageQuery string) Option {

    return func(query Query) Query {

        query.PageQuery = pageQuery

        return query

    }

}

然后调用它:


NewQuery("tags query only")

NewQuery("tags query", WithPageQuery("page query"))


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信