通过引用传递接收器结构

时间:2018-09-17 17:21:49

标签: go struct

我需要一个函数来返回由调用者传递给函数的结构。每次调用该函数的结构都会不同。

我正在使用ORM postgres驱动程序“ github.com/go-pg/pg”。 据我了解,ORM需要在调用.Query()之前定义该结构,该查询将使用数据库中的数据填充该结构。

return

结果将在用户结构中。但是,我需要在另一个包中定义此结构并将其传递给此函数。我在这里可以做些界面魔术吗?

1 个答案:

答案 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()变量)。