将int数组转换为以','分隔的字符串

时间:2016-09-20 13:10:16

标签: go

我知道对于字符串数组[]string我可以使用strings.Join(a []string, ',')但我想对整数数组[]int做同样的事情。

对于variants[]map[string]int

的查询,我的用例是这样的
 var Ids []int
    sqlStr := "select id from mapping where my_id in ("
    for _, mp := range variants {
       sqlStr += "?,"
       Ids = append(Ids, mp["id"])
    }
    sqlStr = strings.TrimRight(sqlStr, ",")
    rows, err := db.Query(sqlStr+")", strings.Join(Ids, ',')) // I can't do this because Join needs String array

如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

IDs设为[]string并在追加它们时转换整数

var IDs []string
for _, i := range []int{1, 2, 3, 4} {
    IDs = append(IDs, strconv.Itoa(i))
}

fmt.Println(strings.Join(IDs, ", "))

https://play.golang.org/p/xrfuMRjgiI

答案 1 :(得分:1)

这是一种有效的方法:

func sqlIntSeq(ns []int) string {
    if len(ns) == 0 {
        return ""
    }

    // Appr. 3 chars per num plus the comma.
    estimate := len(ns) * 4
    b := make([]byte, 0, estimate)
    // Or simply
    //   b := []byte{}
    for _, n := range ns {
        b = strconv.AppendInt(b, int64(n), 10)
        b = append(b, ',')
    }
    b = b[:len(b)-1]
    return string(b)
}

您可以在SQL查询中使用它:

query := `SELECT * FROM table WHERE id IN (` + sqlIntSeq(ids) + `)`

游乐场:https://play.golang.org/p/zi7YYetGu7

答案 2 :(得分:1)

我更愿意使用json.Marshal。它非常简单易用。

data := []int{100, 200, 300}
s, _ := json.Marshal(data)

fmt.Println(strings.Trim(string(s), "[]"))

GoPlaygroundLink

希望这对您有所帮助。如有疑问,请随时提问。 WebsiteLink

相关问题