doukan4795 2016-09-20 13:10
浏览 182
已采纳

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

I know that for string array []string I can use strings.Join(a []string, ',') but I want to do the same thing for an integer array []int.

My usecase is something like this for a query where variants is []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

How to achieve this?

  • 写回答

3条回答 默认 最新

  • dpsu84620 2016-09-20 14:18
    关注

    Here is an efficient way to do that:

    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)
    }
    

    You can use it in the SQL queries like that:

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

    Playground: https://play.golang.org/p/zi7YYetGu7.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效