gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:25:36 26 4
gpt4 key购买 nike

我想知道是否有一种方法可以像在 Java 中那样在 Go 中实现多个构造函数(具有相同的函数名称)。另一种选择可能是只有一个带有可选参数的构造函数,但我不确定该怎么做。

This seems similar to what I was trying to do

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。第二个构造函数有两个参数:TagsQueryPageQuery

最佳答案

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"))

关于go - Go/可选参数中的多个构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56178203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com