我正在使用 go mysql 库来执行多个数据库任务。鉴于我想在 mysql 库上编写一个包装器包,我发现自己陷入了以下情况:
我有一个具有以下签名的方法:
func(db *MySQL) Insert(query string, args ...interface{}) (int64, error)
此方法db.Exec从具有以下签名的库中调用函数:
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
似乎当我调用我的方法时Insert("some query", 1, "test"),它values ...interface{}被转换为[]interface{}与 Exec 函数参数不兼容的类型args ...interface{}。
Q1:通过了解这种情况并考虑到我无法修改Exec函数的签名,我怎么可能args从我的Insert函数转移到Exec函数?
我已经尝试了几件事来实现这一点,但似乎我无法实现,也找不到将我的参数放入该函数调用的方法。
Q2:这甚至可以在不修改签名的情况下实现Exec吗?
编辑:这是我试图用上述功能实现的一个例子:
func(db *MySQL) Insert(query string, values ...interface{}) (int64, error) {
/**
* TODO: find a way to implement the args slice
* to implement this remember that behind Exec(_, values) there is a [] interface{} element
* which will decompose this element inside. so by passing a values ...interface{} function won't work
* as the values ...interface{} has another data type structure in the end
*/
//
if res, err := db.dbConn.Exec(query, values); err != nil {
return -1, err
} else {
if lastId, err := res.LastInsertId(); err != nil {
return -1, err
} else {
return lastId, nil
}
}
}
千巷猫影
相关分类