Если вам нужно, чтобы каждый раз передавался другой тип, ваш аргумент должен быть интерфейсом, а указатель на структуру, которую нужно заполнить, должен передаваться в этот интерфейс:
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()
).