好好学习,天天向上

方法 指针 VS. 值 可以为任何命名类型(除了指针或者接口外)定义方法。方法的接收者不是一定要是结构的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 type ByteSlice []byte // 值方法 func (slice ByteSlice) Append(data []byte) []byte { // 要求该方法返回更新的值 ..... } // 指针方法 func (p *ByteSlice) Append(data []byte) { // 这个方法可以修改调用者,因此不用返回 slice
阅读全文 »

数据 用new(T)进行分配 new是一个内置函数,用来为变量分配内存。但和其他语言中的new不一样,该方法并不会初始化所分配的内存,而只是清空它。也就是说,new(T)为一个类型为T的项分配已清零的内存,然后返回该内存地址(一个类型为*T的值)。用Go的话来讲,它会返回一个指向一个新分配的类型为T的零值的指针。 利用new返回的内存使用类型零值的特点,自定义的数据结构在调用new之后,其字段就可以直接使用而不需要进一步的初始化了。例如对于下面的类型声明: 1 2 3 4 5 6 type SyncedBuffer struct { lock sync.Mutext bu
阅读全文 »

言小白年初许下了关于golang的愿望,这是来践约的。 另外,本小抄无扫盲功效,如需从零开始,参见A Tour of Go 控制结构 重新声明和重新赋值 1 2 3 4 f, err := os.Open(name) // 声明两个变量:f和err d, err := f.Stat() // 此处,err已经在上面语句中声明了,因此这里仅仅是重新赋值。这意味着,对f.Stat的调用使用上面已经声明的变量err,并仅仅给它赋予一个新的值 在:=声明中,变量v即使已经声明过,也可以出现在:=的左端,只要它满足以下: * 声明和变量v的现有声明位于同一个作用域(如果v在外部作用域中已经被
阅读全文 »

自从Ele偶然发现我大深圳图书馆的藏书紧跟时代潮流,以及以前不知道的预借功能和邮寄功能之后,amazon的unlimited就被我毫不留情地打入冷宫,然后几年前办理过的深图借书证开始进入宠妃行列。至此,Ele便过上了在豆瓣mark书,然后跑到深圳图书馆找书的日子。 这里要安利深图的预借和邮寄功能。可以预借的书提交预借申请后,图书馆就会帮你找书,然后投递到指定的地方,接下来只需要带着图书证去取书即可。如果你不想多走几步的话,那么对于那些标明可以邮寄的书籍,仅需6软妹币,快递上门不是梦~~ 虽然说在图书馆找书这种事已经基本可以交给图书馆了,但是还是要打开深图的页面搜索一下是否有你想要的图书。对
阅读全文 »

打开手机,日常使用的诸多app都是木有网页版的。故而有时候我们想看看这些app背后在做些什么就不能简单地打开浏览器或者使用tcpdump/wireshark等工具。移动的问题交给移动,下面我们就来看看几种移动端app抓包的姿势吧。 姿势1:以牙还牙 难度:★ 使用设备:手机x1 使用Android…… 无需root 步骤: 1. 在手机上安装Packet Capture 2. 打开Packet Capture,并点击右上角绿色的三角符号开始抓包: 3. 打开你要抓包的app(这里以“活法儿”为例),进行一系列操作…… 4. 切回到Packet Capture,暂停抓包。 5. 点击已抓
阅读全文 »

第一次知道celery是因为想给django加入异步。 众所周知,django对单个请求是同步的,这里同步的意思是,客户端发起一个request,django完全处理完毕之后才返回response。这种情况下,如果django处理的时间很长很长,客户端就会出现等待不到响应超时的情况。而当时我刚好需要通过django调用ansible进行一些长时间的任务。这些任务耗时之长,可以达到1h。而让客户端一直等待响应1h显然是非常不可取的。 示意图1此时,一个解决方案就是,django把长耗时的任务交由某种机制进行处理,然后立即返回response。之后,客户端通过另外的接口,查询任务处理情况。
阅读全文 »

西溪植物园饱满的蒲公英正题之前,先碎碎念几句。 Ele近来对系列文略感兴趣,因此准备开一个好物推荐的系列文,讲讲工作生活中用到的小而美的东东(可能是某些库,工具之类的)。算是雁过留痕,以备后续翻阅吧。 好啦,絮絮叨叨的话讲完了,我们进入正题吧。 话说这近一年来,Ele少数不多坚持下来的事情就是python-doc了。一开始仅仅是为了入门python顺便练练专业英语,虽然到后面有所懈怠,但是每周不翻一次Python Weekly总觉得亏欠了谁什么似的。因为放在github上,所以当初选择了markdown作为文本格式。 但是,Ele翻的文章都是在网上找的,因此需要将HTML转成markd
阅读全文 »

去年Ele练手弄了一个repo,玩了几个网站的登录和打卡功能之后就把这个小东东扔到香蕉派上,一并加入cron套餐。之后就没再理之。 小东西好好地跑了几个月,之后的某一天登上去看日志,发现好几个网站的自动登录和打卡都error了,懵逼之下跑到那些个网站上一看,哎呀,改版变规则什么的,就是辣么任性/(ㄒoㄒ)/~~ 所以只能重写了。但是重写并非分分钟的事情(过程见[Python]沪江部落自动登录打卡),懒癌犯了的Ele就暂时这样LET IT GO了。 之后这个repo居然陆陆续续有人star,这引发了Ele的羞耻心,毕竟,坑人是不对的不对的不对的!!!又后来,懒惰的Ele看到了seleniu
阅读全文 »

说明:以master为例 根据uwsgi文档,当uwsgi接收到SIGHUP信号的时候,会优雅地重载所有的worker和master进程。(参考:uwsgi中文) 而在master_loop()方法(位于core/master.c)中,注册了接收到SIGHUP信号的处理方法为grace_them_all:uwsgi_unix_signal(SIGHUP, grace_them_all); 起始:void grace_them_all(int signum) 位于uwsgi/core/uwsgi.c中 在这个方法中,uwsgi会针对不同的模式,修改状态,关闭清理不同的进程。具体执行如下:
阅读全文 »

前几天拍视频,有个问题是,用一个词总结过去的一年。想了很久,给了三个字:刷副本。 从HW离开,到进入JG之间的几个月的时间内,狠狠地休息了一把。额外的bonus之一是,完全没有把上一份工作的负面情绪带到新工作中。于是在做新手村任务的时候,虽然多而杂,但是却也心甘情愿,沉醉于其中。在这过程中,一次又一次地验证了LEARN BY DOING的指导思想是多么多么地正确。 知道了好多东西。nginx、uwsgi、couchbase、rbmq、redis…… 而另外一个则是,DIVE BY ISSUE。虽然无BUG是一个程序员毕生的追求,但是没有BUG的世界也缺少了那么点动力。特别是对于懒癌常常发
阅读全文 »