Techyou labs
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
常用标签
您正在查看: Programming 分类下的文章

在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合,同时还要对集合中的数据进行统计排序。

常见的场景如下:

  • 给一个 userId ,判断用户登陆状态;
  • 两亿用户最近 7 天的签到情况,统计 7 天内连续签到的用户总数;
  • 统计每天的新增与第二天的留存用户数;
  • 统计网站的对访客(Unique Visitor,UV)量
  • 最新评论列表
  • 根据播放量音乐榜单

通常情况下,我们面临的用户数量以及访问量都是巨大的,比如百万、千万级别的用户数量,或者千万级别、甚至亿级别的访问信息。

February 17, 2021

项目开发的一般流程是先fork项目,然后基于自己fork的项目开发,最后通过提交PR将自己的代码merge到上游。 这里会涉及到两个:上游仓库和自己fork的仓库,它们之间最终通过PR关联起来。 但是,由于Golang特定的GOPATH依赖,导致这种方式针对于Golang项目会有些问题。

常见开发流程:

  1. 将项目fork自己的账户下;
  2. Clone自己fork的项目到本地,并进行开发;
  3. 将修改的代码push到自己fork的项目中;
  4. 从fork的项目中为自己的代码创建PR;
  5. 等这个PR被merge后,自己的代码才能进入上游项目。

举个例子,来演示整个过程。为描述清晰、方便,有如下约定:

上游项目为org/repo
fork项目为user/repo

按照常规的Git开发流程,在本地clone的fork项目中直接go build,会存在依赖问题:

Fork出来的项目在GOPATH中的路径发生了改变,但是代码中import的路径没有改变,所以没有使用fork项目中的package。

即使构建成功,但是真正使用也不是fork项目中修改的代码 有可能GOPATH中已经存在org/repo,所以按照上面的方式构建,不会提示错误。但是如果在user/repo中修改的代码,是无法生效的。 因为代码中引用的是org/repo的package,不是user/repo中修改过的package。