+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > Go 中的多个构造函数/可选参数? >

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

时间:2024-04-06 14:40:33

最近发现不少小伙伴都对golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《Go 中的多个构造函数/可选参数?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容
我想知道是否有一种方法可以在 go 中实现多个构造函数(具有相同的函数名称),就像在 java 中一样。另一种选择可能是只有一个带有可选参数的构造函数,但我不确定如何准确地做到这一点。

这看起来与我想要做的类似

type Query struct {
    TagsQuery string
    PageQuery string
}

// First Constructor
func NewQuery(TagsQuery string) Query {
    return Query{
        TagsQuery: TagsQuery,
        PageQuery: "0", // default to first page
    }
}

// Second Constructor
func NewQuery(TagsQuery string, PageQuery string) Query {
    return Query{
        TagsQuery: TagsQuery,
        PageQuery: PageQuery,
    }
}
第一个构造函数采用一个参数 tagsquery 并将 pagequery 默认为 0。第二个构造函数采用两个参数:tagsquery 和 pagequery。


解决方案

dave cheney 通过功能选项提供了此问题的解决方案:

https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis

因此,您可以接受任意数量的可以修改正在创建的结构的函数。在您的情况下,您可以仅针对可选的 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"))

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title