我需要一个函数来返回由调用者传递给函数的结构。每次调用该函数的结构都会不同。
我正在使用ORM postgres驱动程序“ github.com/go-pg/pg”。 据我了解,ORM需要在调用.Query()之前定义该结构,该查询将使用数据库中的数据填充该结构。
return
结果将在用户结构中。但是,我需要在另一个包中定义此结构并将其传递给此函数。我在这里可以做些界面魔术吗?
答案 0 :(得分:3)
如果您每次都需要传递不同的类型,则您的参数需要是一个接口,并且指向要填充的结构的指针需要传递到该接口:
func PgSql(dest interface{}, statement string)(output []string, err error) {
_, err = db.Query(dest, statement)
// handle error
}
func main() {
var user User
_, err := PgSql(&user, `SELECT * FROM standard_lookup WHERE pkid_ = 'STATE|AFKDZ'`)
// handle error
}
请注意,在PgSql
函数中,您直接传递了dest
接口变量,不是指向它的指针。那是因为该接口已经持有一个指针(用&user
调用),所以您不需要传递对接口的引用,只需传递接口的值(它本身就是在此代码中引用user
中的main()
变量)。