登录
首页 >  Golang >  Go问答

Golang Join 数组接口

来源:Golang技术栈

时间:2023-03-28 17:03:26 356浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang Join 数组接口》,介绍一下golang,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我尝试创建批量插入。我使用gorm github.com/jinzhu/gorm

import (
    "fmt"
    dB "github.com/edwinlab/api/repositories"
)

func Update() error {
    tx := dB.GetWriteDB().Begin()
    sqlStr := "INSERT INTO city(code, name) VALUES (?, ?),(?, ?)"
    vals := []interface{}{}

    vals = append(vals, "XX1", "Jakarta")
    vals = append(vals, "XX2", "Bandung")

    tx.Exec(sqlStr, vals)

    tx.Commit()

    return nil
}

但我得到一个错误:

错误 1136:列计数与第 1 行的值计数不匹配,因为我返回了错误的查询

INSERT INTO city(code, name) VALUES ('XX1','Jakarta','XX2','Bandung',

%!v(MISSING)),(%!v(MISSING), %!v(MISSING))

如果我使用手动查询,它可以工作:

tx.Exec(sqlStr, "XX1", "Jakarta", "XX2", "Bandung")

它将生成:

INSERT INTO city(code, name) VALUES ('XX1', 'Jakarta'),('XX2', 'Bandung')

问题是如何使数组接口生成类似的字符串"XX1", "Jakarta", ...

感谢帮助。

正确答案

如果要将切片的元素传递给具有可变参数的函数,则必须使用...告诉编译器您要单独传递所有元素而不是将切片值作为单个参数传递,因此只需执行以下操作:

tx.Exec(sqlStr, vals...)

这在规范中有详细说明:将参数传递给...参数

Tx.Exec()签名:

func (tx *Tx) Exec(query string, args ...interface{}) (Result, error)

所以你必须通过vals...。也不要忘记检查返回的错误,例如:

res, err := tx.Exec(sqlStr, vals...)
if err != nil {
    // handle error
}

终于介绍完啦!小伙伴们,这篇关于《Golang Join 数组接口》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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