初级会员
  • 第 53807 位会员
  • boonbonnpeng
  • 2020-06-10 16:30:15
  • Offline
  • 19 80

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了主题 这个题目有点怪
    `for _, stu := range stus { m[stu.name] = &stu }`</br> 三次循环复用的是同一个stu变量,你对这个stu取指针并赋值到m中,就导致m中三个key映射的都是stu。</br> 在最后一次循环中,stu被赋值为“博客”,所以最后三个key打印出来的都是“博客”。</br> 要解决这个问题,最简单而且不影响原有逻辑的方法是每次循环都定义一个局部变量:</br> `for _, stu := range stus { stu := stu m[stu.name] = stu }`</br> 或者通过下标访问切片:</br> `for i := range stus { m[stus[i].name] = stus[i] }`
  • #6 @dmwin72015 设定初始值和步长、打乱映射规则可以一定程度缓解这个问题。 从123开始自增,每次自增2。 1转换为9,2转换为5,3转换为7,那么自增id 123映射成短ID是957。实际使用中还会混合大小写字母,总共26+26+10=62种字符,你打乱后,完全猜出来是很难的。 更进一步,每次从mysql/redis拿一批id,在本地从这批id中随机取,这样别人既无法推测当前使用情况,也无法计算增长规律。
  • ch <- "msg"是单独的语句,类似i++,不能作为输入
  • redis或者mysql自增id,然后映射成六位字符串
  • @lishuailw 可以了解一下fmt包下的GoStringer和Formatter