在 go 的项目中同时引用较新版本的 etcd 和 protoc-gen-go 会产生一些问题,具体表现为:
1 2 3 4 5 6 7 8 9 10 11
go: finding module for package google.golang.org/grpc/naming go: finding module for package github.com/coreos/bbolt go: found github.com/coreos/bbolt in github.com/coreos/bbolt v1.3.6 go: node/watch imports go.etcd.io/etcd/clientv3 tested by go.etcd.io/etcd/clientv3.test imports github.com/coreos/etcd/auth imports github.com/coreos/etcd/mvcc/backend imports github.com/coreos/bbolt: github.com/coreos/[email protected]: parsing go.mod: module declares its path as: go.etcd.io/bbolt but was required as: github.com/coreos/bbolt
或者
1 2 3 4 5 6
uapm-agent/watch imports go.etcd.io/etcd/clientv3 tested by go.etcd.io/etcd/clientv3.test imports github.com/coreos/etcd/integration imports github.com/coreos/etcd/proxy/grpcproxy imports google.golang.org/grpc/naming: module google.golang.org/grpc@latest found (v1.45.0), but does not contain package google.golang.org/grpc/naming
GraphQL 大家都不再陌生了,很多技术前瞻(作死)的公司都在用了,其中 fragment 作为一个 feature 我觉得很有必要单独拿出来说道说道。GraphQL 作为一种查询语言,从 OOP 的思想来看,fragment 可以看作是这个语言的 class ,也就是对一个具有相同属性的对象的定义。然后就可以多处引用,而无需多次编写。一个基本的 fragment 用起来形如下:
很多 App 都会要求输入的字符种类、长度有所限制,在此之前我其实已经遇到了这样的需求,只能输入中文和英文,并且不同的语言所限制的长度不同。那个时候会觉得这样的限制比较麻烦,因为总认为涉及到中文的判断就比较麻烦,所以推脱说实现比较麻烦没有太多的时间,就给暂时压了下来。直到第二次遇到这样的需求我直到没办法再退了,结果 google 了下发现判断中文也没那么麻烦,使用正则判断中文字符范围即可。
这次就主要说一下项目中用到的新的 API 请求框架 GrqphQL 。GrqphQL 是由 facebook 开源的新一代 API 请求框架,具体的介绍和与 REST 的差别大家还是 Google 吧,我也不想 copy and paste,不过我会把具体使用过程中遇到的问题和体会写在这里,供大家参考。
要说到闪屏,几乎已经是所有 App 的标配了。但是各家对于闪屏的理解和应用方式各不相同。比如 Google 自己并不建议在闪屏页中设置过长的停留时间,而只是作为冷启动过程的一种变相缓冲,以就是仅在背景上设置一个 APP Logo 来避免屏幕留白。但在中国,几乎所有的流量还不错的 App 都会在闪屏页中加入广告,或者自己应用中某个主题活动的宣传,在增强品牌效应。这其中又有不同的使用流派,但基本都可以归为一个流程:
部分 App 会直接省略 Logo 这一环,直接加载闪屏页。观察了几个常用 App 后,我发现网易云音乐的闪屏逻辑是最好的,这不是说网易云音乐的闪屏流程与上面的图片有什么不同,而是网易优化了冷启动过程。一般来说,App 在点击 back 退出以后,再次打开会重新进入冷启动流程,也就是会再次进入闪屏显示流程,但是网易云音乐就不会:它只会在你第一次打开该 App 的时候加载 Loge 和 Splash,然后即使你按了 back 退出到屏幕,再次打开就不会再走闪屏流程了。这样即使用户多次退出打开也只会显示一次 Splash 页面,那么就算网易云的 Splash 时间稍微长一点你也不会在乎的吧(斜眼笑)。
首先说显示 Logo,如果 App 的 Logo 与开始的图片上的流程是一样的,那么 Logo 是可以有两种方式来显示的。
通过 windowBackground 来设置:可以在屏幕背景里放一个非全屏显示的图片,作为打开的留白的间隙的替代,当正常内容加载完就会被覆盖掉。Logo 的显示时间取决于正常内容的加载时间,如果加载很快,Logo 就会一闪而过。但为什么是非全屏显示呢,对于 windowBackgroung,很难设置图片的拉伸模式,那么屏幕适配就非常麻烦。所以放一个非全屏图片,设置个背景色或许是个不错的选择。这种方式也是 Google Photos 在用的。至于一闪而过对于用户的体验是否良好就仁者见仁了。另外值得一提的是网易云应该也是使用这种方式,因为 Logo 的显示时间并不总是相同而且没有丝毫的留白间隙,但是它的 Logo 是全屏的,这就得佩服下网易的技术水平了(微笑脸)。
除了这种方式就是常规的用一个单独的页面来显示 Logo 了,这种没什么好说的,全屏往里面放图片就行了。
To C:/Users/Alpha/AppData/Local/Temp/d20170730-15308-3dbr6w/.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'C:/Users/Alpha/AppData/Local/Temp/d20170730-15308-3dbr6w/.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.