登录
首页 >  Golang >  Go问答

执行数据插入查询操作

来源:stackoverflow

时间:2024-03-02 20:18:25 200浏览 收藏

大家好,今天本人给大家带来文章《执行数据插入查询操作》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我有一个典型的函数,它接受来自前端的 post 请求并将数据解码为结构,以便将其放入 psql 数据库中。您可以看到下面的代码。我的问题是我希望能够抽象这个函数,这样我就可以给它任何数量的任何类型的变量,这样对于每个请求我就不必有一个单独的写入处理程序。

这看起来很困难,因为我必须以某种方式传递抽象 varprofitreqprofitreq 才能适用于任何结构。如果 golang 有某种 eval 字符串方法,我会知道如何做到这一点,但是如果我错了,有人会纠正我,但我不认为它会这样做。

我需要更改的另一个地方是 queryrow - 我必须能够将其传递到可变数量的变量中。我可以很容易地构造字符串,但我不确定如何将变量附加到该 queryrow 上。例如,如果我将所有变量附加​​到一个数组中,我无法将该数组传递到 queryrow 中,因为这不是它的结构方式。同样,这里某种 eval 语句会有所帮助。

我是 golang 新手,但我见过很多与接口相关的很酷的东西,我承认我不太理解。有没有办法在这里使用一个有帮助的界面?

感谢任何可以提供帮助的人!

func Write_profit_table(profitWriteChannel chan string, profitType string, req *http.Request) {
    var profitReq profitReq;
    err := json.NewDecoder(req.Body).Decode(&profitReq);
    if err!=nil{
        log.Panic(err)
    }

    NotInDB, _ := Search_userinfo_table(profitReq.Email)

    if NotInDB == false {
        var lastInsertId int
        err2 := db.QueryRow("INSERT INTO profit(email, type, dateArray, amount, interest, compounded, recurring, name, description, profitFrom) 
                VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) returning uid;", 
                profitReq.Email, profitReq.Type, pq.Array(profitReq.DateArray), profitReq.Profit, profitReq.Interest, 
                profitReq.Compounded, profitReq.Recurring, profitReq.Name, profitReq.Description, profitReq.ProfitFrom).Scan(&lastInsertId);
        if err2!=nil{
            log.Panic(err2)
        }
    }

    profitWriteChannel<-"finished writing to profit"
}

解决方案


您正在寻找的功能称为泛型。
Go 1.x 不支持泛型
幸运的是,有一个 proposal for them for Go 2 (called Contracts)

在那之前你能做什么?

  1. 复制您的代码(可能是您现在正在做的事情)
  2. 使用接口
    如果您知道此方法将始终通过电子邮件查询,您可以为此目的创建简单的接口: type Emailer interface { Email() string }

  3. 使用空接口 (interface{}) 和反射来确定您拥有哪些列。

  4. 编写您自己的生成器。有点像 (1),但您不必自己执行此操作。

要点如下: https://play.golang.org/p/A_2YKWLvmn-

以上就是《执行数据插入查询操作》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>