如何使用Golang从一个函数返回不同类型的结构?
我有一个查询数据库的函数,然后,根据它的结果,可以创建一个结构如何使用Golang从一个函数返回不同类型的结构?,go,Go,我有一个查询数据库的函数,然后,根据它的结果,可以创建一个结构OrderWithoutDetails或OrderWithDetails,这取决于是否存在有关订单的详细信息 如何使函数能够返回这两种类型的结果?您可以使用接口{} func queryDb() interface{}{ } 但是更好的是,如果你的2类结构可以有一个公共函数,可以满足一个公共接口,它会更干净。 例如: type s1 struct{ id int name string } type s2 struct{
OrderWithoutDetails
或OrderWithDetails
,这取决于是否存在有关订单的详细信息
如何使函数能够返回这两种类型的结果?您可以使用
接口{}
func queryDb() interface{}{
}
但是更好的是,如果你的2类结构可以有一个公共函数,可以满足一个公共接口,它会更干净。
例如:
type s1 struct{
id int
name string
}
type s2 struct{
id int
age int
}
type reDB interface {
my_print()
}
func (r *s1) my_print(){
fmt.Print(s1.id)
}
func (r *s2) my_print(){
fmt.Print(s1.id)
}
func queryDb() reDB{
...
}
您可以使用
接口{}
func queryDb() interface{}{
}
但是更好的是,如果你的2类结构可以有一个公共函数,可以满足一个公共接口,它会更干净。
例如:
type s1 struct{
id int
name string
}
type s2 struct{
id int
age int
}
type reDB interface {
my_print()
}
func (r *s1) my_print(){
fmt.Print(s1.id)
}
func (r *s2) my_print(){
fmt.Print(s1.id)
}
func queryDb() reDB{
...
}
取决于什么,你是否会得到细节?如果您知道在调用函数时,最好有两个不同的函数。如果不是,并且OrderWith/WithoutDetails几乎相同,则可以编写一个函数func findOrder(Order,*[]Detail,error),返回details或nil。您还可以订购*详细信息。返回接口{}也很好,或者更好的接口,它返回您的详细信息?如果您知道在调用函数时,最好有两个不同的函数。如果不是,并且OrderWith/WithoutDetails几乎相同,则可以编写一个函数func findOrder(Order,*[]Detail,error),返回details或nil。您还可以订购*详细信息。返回接口{}也很好,或者更好的接口,它返回您的详细信息。围棋用的是骆驼套,不是蛇套。这一点尤其重要,因为在您的示例中,接口
reDB
和其中的my_print()
函数没有导出,因此无法在定义包之外访问。是的,我知道对于CamelCase
,我很快就写了,我从C开始练习。但这与导出与否无关,只有第一个字母与此有关,CamelCase
不是PascalCase
。另外,这里我们不关心导出与否,也许他不想导出这些func/var;)名称中的下划线在Go中不惯用。围棋用的是骆驼套,不是蛇套。这一点尤其重要,因为在您的示例中,接口reDB
和其中的my_print()
函数没有导出,因此无法在定义包之外访问。是的,我知道对于CamelCase
,我很快就写了,我从C开始练习。但这与导出与否无关,只有第一个字母与此有关,CamelCase
不是PascalCase
。另外,这里我们不关心导出与否,也许他不想导出这些func/var;)