【Golang排序中的数据类型细节】困扰一周的little bug出现的huge problem!

    技术2024-07-27  64

    短短的四五十行代码,从取数据库数据到排序,到JSON格式反馈,每一个逻辑、结构、算法、代码都似乎没有破绽,但是排序出来的样子,见下图。 为啥两位数、三位数、四位数给我分开排啊?还不是按正确的次序呢?烦… 上面是出现的问题,下面是正题

    鉴于注册时收数据用的是POST请求,所以收到的数据是string类型 那么我在存放数据的时候,理所当然地存进了string类型的变量中 然后呢?我从数据库取出数据存放在结构体数组中,以便排序 这确实没有问题,于是没想想太多,数据也少,直接冒泡排序 然后就出现了上述问题——不同位数的数据分开排序(排序结果崩了) 问题的原因很简单…你排的是string,转int再排序便不会出现这个问题了! 于是有了如下代码:

    for i := 0; i < cnt; i++ { fmt.Println(i, users[i]) users[i].score_int, _ = strconv.Atoi(users[i].score) } //排序 for m := 0; m < cnt-1; m++ { for n := 0; n < cnt-m-1; n++ { if users[n].score_int < users[n+1].score_int { users[n], users[n+1] = users[n+1], users[n] } } }

    OK,反馈JSON给前端吧

    //反馈 for i := 0; i < cnt; i++ { fmt.Println(users[i]) c.JSON(http.StatusOK, gin.H{ "userId": users[i].userId, "solve_problem_score": users[i].score, "problem_solved_number": users[i].problem_solved_number, }) } c.JSON(http.StatusOK, gin.H{ "total": cnt, })

    上述方法解决了排序BUG,在代码逻辑、结构、算法、语法等等都没有问题的时候,多考虑考虑是不是**细节出现了问题!**也许就是因为数据类型不对称,导致后面几百行代码通通出现类似的BUG,写项目和工程,一定注意这几点:

    逻辑结构算法细节语法

    附常用类型转换方法:

    import "strconv" //string到int int,err:=strconv.Atoi(string) //int到string string:=strconv.Itoa(int)
    Processed: 0.010, SQL: 9