用。。。来代替 ”?”切片中的所有元素/为切片中的尽可能多的元素创建一个字符串?
Replace with "?" all elements in a slice / create a string with ?, for as many elements in a slice
我正在用 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
循环中实现一个计数器并动态构建字符串,但我想知道是否有更简洁或更“官方”的方式来做到这一点
您可以构建一个 "?"
字符串片段,然后使用 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, ",") // => "?,?,?,?"
我正在用 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
循环中实现一个计数器并动态构建字符串,但我想知道是否有更简洁或更“官方”的方式来做到这一点
您可以构建一个 "?"
字符串片段,然后使用 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, ",") // => "?,?,?,?"