如何在 Golang 中使一个函数能够返回不同类型的结构体?

huangapple go评论82阅读模式
英文:

How to make possible to return structs of different types from one function with Golang?

问题

我有一个函数,它查询数据库,然后根据查询结果,可以创建一个名为OrderWithoutDetailsOrderWithDetails的结构体,具体取决于订单是否有详细信息。

我该如何使这个函数能够返回两种类型的结果?

英文:

I have a function which queries database, then, depending on result form it, can create a struct OrderWithoutDetails or OrderWithDetails depending on the presence of details about the order.

How do I make the function to be able to return result of both types?

答案1

得分: 0

你可以使用interface{}

func queryDb() interface{}{

}

但更好的做法是,如果你的两种结构体可以有一个共同的函数,满足一个公共接口,这样会更清晰。例如:

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{
 ...
}
英文:

You can use interface{}

func queryDb() interface{}{

}

But the better will be if your 2 type of struct can have a common function, that can satisfy a common interface, it will be cleaner.
Example :

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{
 ...
}

huangapple
  • 本文由 发表于 2016年11月21日 20:18:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/40720039.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定