Powered by Typecho)))
Optimized by EAimTY
一切得从复制 iOS 通讯录联系人手机号说起,有同学发现复制的号码是 “(415)555-3695”,长度应该是 13,但Debug 打印的长度却是 15,WTF?
通过断点发现是前后分别多了一个不知何用 Unicode 字符:
U+202D 和 U+202C 这两个是个啥?
其实这两个都是关于方向的 Unicode 控制字符,U+202D 简称 LRO ,U+202C 简称 PDF 。那它们是做什么用,如何控制所谓方向的呢?
在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合,同时还要对集合中的数据进行统计排序。
常见的场景如下:
通常情况下,我们面临的用户数量以及访问量都是巨大的,比如百万、千万级别的用户数量,或者千万级别、甚至亿级别的访问信息。
项目开发的一般流程是先fork项目,然后基于自己fork的项目开发,最后通过提交PR将自己的代码merge到上游。 这里会涉及到两个:上游仓库和自己fork的仓库,它们之间最终通过PR关联起来。 但是,由于Golang特定的GOPATH依赖,导致这种方式针对于Golang项目会有些问题。
举个例子,来演示整个过程。为描述清晰、方便,有如下约定:
上游项目为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。