首页 > 解决方案 > 用。。。来代替 ”?” 切片中的所有元素/使用 ? 创建一个字符串,用于切片中的尽可能多的元素

问题描述

我在 Golang 做我的第一个任务,因此这可能是一个愚蠢的问题。

我有一种情况,我需要动态创建一个带有array( ) 个参数的查询,因此预执行slice的 "" 数量相等。?

这里是:

var reportIds []int // eg [1, 2, 3, 4]

values := make([]interface{}, 0, len(reportIds))
for  key, _ := range reportIds {
  values = append(values, reportIds[key])
}

statement, _ :=
    database.Prepare("DELETE FROM reports WHERE id IN ({??my_dynamic_question_marks??})")
statement.Exec(values...)

它适用于值,但我不明白是否有一种干净的方法可以n用“”替换切片中的多个元素,?以便我可以将join其转换为字符串。?,我提出了这个想法,因为它看起来很干净,但是任何用“ ”创建字符串的方法slice都可以使用(当然最后一个没有逗号)。

我当然可以在循环中实现一个计数器for并动态构建字符串,但我想知道是否有更清洁或更“官方”的方式来做到这一点

标签: arraysstringgoreplaceslice

解决方案


您可以构建一个"?"字符串切片,然后将它们连接在一起strings.Join,它接受一个字符串切片和一个分隔符:

var reportIds []int // eg [1, 2, 3, 4]

values := make([]interface{}, len(reportIds))
placeHolders := make([]string, len(reportIds))

for idx, reportID := range reportIds {
  values[idx] = reportID
  placeHolders[idx] = "?"
}

strings.Join(placeHolders, ",") // => "?,?,?,?"

推荐阅读