第一个问题的答案是 Query 是所谓的可变参数函数 https://golang.org/ref/spec#Function_types .它接受任意数量的最后一种类型的参数,并作为 slice 传递给函数。

queryValues... 与此相反。它正在获取您的 slice 并将它们作为单独的参数传递给查询。它正在做与您所做的相同的事情:

dbConnection.Query(query, queryValues[0], queryValues[1])

在这种特殊情况下,您不需要 []接口(interface){}

dbConnection(query, obj.Name, obj.Age)

您的 $1、$2 占位符未被转换的原因可能是因为您为正在使用的特定驱动程序使用了错误的占位符。这取决于驱动程序本身。例如 MySQL 驱动程序使用 '?'因为它是占位符。