Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 哥朗函数的推广_Sql_Function_Go_Generalization - Fatal编程技术网

Sql 哥朗函数的推广

Sql 哥朗函数的推广,sql,function,go,generalization,Sql,Function,Go,Generalization,我想写一个处理SQL查询的通用函数 模块提供函数StructScan(),自动将结果扫描到struct字段中 type Place struct { Country string City sql.NullString TelephoneCode int `db:"telcode"` } rows, err := db.Queryx("SELECT * FROM place") for rows.Next() { var p Pla

我想写一个处理SQL查询的通用函数

模块提供函数
StructScan()
,自动将结果扫描到struct字段中

type Place struct {
    Country       string
    City          sql.NullString
    TelephoneCode int `db:"telcode"`
}

rows, err := db.Queryx("SELECT * FROM place")
for rows.Next() {
    var p Place
    err = rows.StructScan(&p)
}
因此,建议的函数签名如下所示:

func Query(db *sql.DB, query) {
    rows, err := db.Queryx("SELECT * FROM place")
    for rows.Next() {
        var p CustomType
        err = rows.StructScan(&p)
    }
}
问题是,我事先不知道表示为自定义类型的变量的确切类型,因为它根据特定的查询而不同(一些查询返回string,另一个int等)

其中一个选项是将类型
自定义类型
作为参数传递给
查询
。但是,我不知道如何用所需的类型初始化局部变量
p


有办法吗?

回答你的一般问题:这不是惯用的围棋。相反,要找到一种方法传入接收器,而不是动态创建它。后者实际上是不可能的,而且无论如何都很难使用


要回答您的特定用例,只需使用sqlx的或,它们与您建议的包装器函数实现完全相同的功能,但以惯用的方式。

要回答您的一般问题:这不是惯用的Go。相反,要找到一种方法传入接收器,而不是动态创建它。后者实际上是不可能的,而且无论如何也很难使用。但是为了回答您的特定用例,为什么不直接使用它呢?您无法从数据库创建具有所需类型的动态结构。如果您想动态地存储这个值,请使用接口。“我想编写一个通用函数”,翻译为“我在运行时的体验和愿意支付运行时的成本”或“我将失败地尝试这样做”。考虑重新设计。提示:JSON。Unmarshal做的事情与你想在这里做的非常类似。将目标作为
接口{}
传递。