October 22, 2013
golang实现验证电子信箱和手机格式合法性(正则表达式)
"邮箱验证\nfunc checkEmail(email string) (b bool) { if m, _ := regexp.MatchString(\u0026#34;^([a-zA-Z0-9\\_-])+@([a-zA-Z0-9\\_-])+(.[a-zA-Z0-9_-])+\u0026#34;, email); !m { return false } return true } 手机验证\npackage main import ( \u0026#34;regexp\u0026#34; ) const ( regular = \u0026#34;^(13[0-9]|14[57]|15[0-35-9]|18[07-9])\\\\d{8}$\u0026#34; ) func validate(mobileNum string) bool { reg := regexp.MustCompile(regular) return reg.MatchString(mobileNum) } func main() { if validate(\u0026#34;13888888888\u0026#34;) { println(\u0026#34;是手机号\u0026#34;) return } …"
October 22, 2013
[必读]golang语言报错信息fatal error: all goroutines are asleep – deadlock!
"出错信息fatal error: all goroutines are asleep – deadlock! 出错信息的意思是: 在main goroutine线,期望从管道中获得一个数据,而这个数据必须是其他goroutine线放入管道的 但是其他goroutine线都已经执行完了(all goroutines are asleep),那么就永远不会有数据放入管道。 所以,main goroutine线在等一个永远不会来的数据,那整个程序就永远等下去了。 这显然是没有结果的,所以这个程序就说“算了吧,不坚持了,我自己自杀掉,报一个错给代码作者,我被deadlock了” 例子:\npackage main func main() { c := make(chan bool) go func() { c \u0026lt;- true }() \u0026lt;-c //这里从c管道,取到一个true \u0026lt;-c //这行导致deadlock,因为这时的c管道,永远都取不到数据(注释掉这行就不报错) } "
October 22, 2013
golang日志模块测试
"package main import ( \u0026#34;fmt\u0026#34; \u0026#34;log\u0026#34; \u0026#34;os\u0026#34; ) func main(){ logfile,err := os.OpenFile(\u0026#34;d:/workspace/golang/test.log\u0026#34;,os.O\\_RDWR|os.O\\_CREATE|os.O_APPEND,0); if err!=nil { fmt.Printf(\u0026#34;%s\\r\\n\u0026#34;,err.Error()); os.Exit(-1); } defer logfile.Close(); logger := log.New(logfile,\u0026#34;\\r\\n\u0026#34;,log.Ldate|log.Ltime|log.Llongfile); logger.Println(\u0026#34;hello\u0026#34;); logger.Println(\u0026#34;oh….\u0026#34;); logger.Fatal(\u0026#34;test\u0026#34;); logger.Fatal(\u0026#34;test2\u0026#34;); } 这里打开日志文件的时候,同时使用 …"
October 11, 2013
Linux 之 /etc/profile、~/.bash_profile 等几个文件的执行过程
"在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,\n执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。\n如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。\n因为在 ~/.bash_profile文件中一般会有下面的代码:\nif [ -f ~/.bashrc ] ; then . ./bashrc fi ~/.bashrc中,一般还会有以下代码:\nif [ -f /etc/bashrc ] ; then . /etc/bashrc fi 所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。\n执行顺序为: /etc/profile -\u0026gt; (~/.bash_profile | ~/.bash_login | ~/.profile) -\u0026gt; …"
October 7, 2013
php框架–php框架的连贯查询实现原理
"如果你是一名使用过多种框架的php程序员,你一定见过这样的查询语句:\n$result = $mysqlDb-\u0026gt;limit(’0,10′)-\u0026gt;order(‘id desc’)-\u0026gt;findall(); 上面的查询语句,连续使用-\u0026gt;操作符进行操作,并最终返回一个查询结果,那么这是如何实现的呢。\n我们来简单分析一下:\n-\u0026gt;操作符用来访问对象,上面的语句一共使用了3次-\u0026gt;操作符,而最后一次返回的是查询结果,这说明,前2次-\u0026gt;访问后,返回的应该是一个对象,因为在php中,如果你对一个非对象使用-\u0026gt;操作符是不可能的。这告诉我们,$mysql实例中的limit和order方法都返回一个对其所在类自身的引用即 return $this,了解了这一点,那么我们就可以实现连贯查询了。请看站长写的示例代码:\n/* *类功能:实现数据库的连贯查询操作 */ class mysql_query{ var $tbl=’user’;//要操作的表名 var $limit=”;//存储limit语句的变量 var $order=”;//存储order语句的变量 var …"
October 7, 2013
[翻译]绝妙的 channel
"在编写 golang 程序的过程中,channel 会经常使用。本文对 channel 的使用的确很特别,同时也非常实用。\n原文在此: http://dave.cheney.net/2013/04/30/curious-channels\n在编写 golang 程序的过程中,channel 会经常使用。本文对 channel 的使用的确很特别,同时也非常实用。\n原文在此:http://dave.cheney.net/2013/04/30/curious-channels\n翻译:http://mikespook.com/2013/05/%E7%BF%BB%E8%AF%91%E7%BB%9D%E5%A6%99%E7%9A%84-channel/#more-1635"
October 4, 2013
VIM编辑器下go语法高亮显示
"Go in Vim The standard Go distribution includes a Go syntax file for Vim in go/misc/vim/.\nInstallation Instructions Place $GOROOT/misc/vim/syntax/go.vim in ~/.vim/syntax/ and put the following in ~/.vim/ftdetect/go.vim:\n在go的安装目录里有/misc/vim/syntax 他 /misc/vim/ftdetect 两个目录,将里面的文件复制到~/.vim/相应的目录里即可。\nau BufRead,BufNewFile *.go set filetype=go\nExtras and Alternative Files An alternative indent file for Vim by Alecs King can be found here.\nAutocompletion The gocode daemon by nsf includes a vim script …"
October 3, 2013
ZeroMQ的模式-Publish-Subscribe[转]
"Publish-subscribe Pattern:发布订阅模式。\n现实中,并不是所有请求都期待答复,而不期待答复,自然就没有了状态。所以相对于REQ-REP,PUB-SUB模式容易理解也简单得多。广播听过吧?收音机用过吧?就这个意思。\n相应地,该模式下的socket也就两种:ZMQ_PUB \u0026amp; ZMQ_SUB。 分别对应电台和收音机。\nZMQ_PUB ZMQ_PUB主要用来让消息发布者用来散发消息的。所有连接上的peer都能收到由它散发的消息。 zmq_recv(3) 这个API是不能用在这个socket上的,原因显而易见。而zmq_send作用在该socket上时是永远不会阻塞的,如果订阅者异常,发出的消息则会被丢弃。\nSummary of ZMQ_PUB characteristics\nCompatible peer sockets ZMQ_SUB Direction\nUnidirectional\nSend/receive pattern\nSend only\nIncoming routing strategy\nN/A\nOutgoing routing strategy …"
October 3, 2013
ZeroMQ的模式-综述
"通过对 Guide 的阅读,可以发现ZeroMQ对这个世界中消息传输的模式进行了很好的抽象。为了描述模式,0mq定义了不同的socket。 0mq socket是0mq世界的东西,跟传统世界的socket是不一样的。\n我们知道,传统的socket其实就是访问下面两种(TCP \u0026amp; UDP)对象的同步的接口:\n面向连接的可靠字节流(SOCK_STREAM) 无连接的不可靠的数据报文(SOCK_DGRAM) 所以你可以说传统socket传输的是字节流或者独立的报文。\n而0mq的socket传输的是消息(Message)。它是对异步_消息_队列(MQ)的一种抽象。官方的原话是:\nØMQ sockets present an abstraction of an asynchronous message queue, with the exact queueing semantics depending on the socket type in use.\n异步的意思在这里指的是物理连接的创建、销毁、重连、传输对于用户来说都是透明的,这些东西都由0mq组织好了。它传输的是独立的**消 …"
October 3, 2013
ZeroMQ的模式-Requset-Reply[转]
"我们先来看看第一种模式:Request-Reply Pattern。 请求应答模式。\nRequest-Reply这个名字很直白,口语点说就是一问一答。可以使同步的遵循请求序的一问一答,也可以是异步的不按请求序的一问一答;其中也可以包含各种不同的路由策略——让谁来回答。zeromq定义的为这个模式服务的socket有:ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER以及ZMQ_DEALER. 用他们进行合理的组合,就可以实现现实世界中各种不同的请求应答模式。\n分别来看:\nZMQ_REQ ZMQ_REQ做的事情就是发问,然后收答。发、收必须是严格按序进行。请求时对对端进行Round Robin,遇到异常则阻塞。官方对这个socket的总结如下:\nSummary of ZMQ_REQ characteristics\nCompatible peer sockets ZMQ_REP Direction\nBidirectional\nSend/receive pattern\nSend, Receive, Send, Receive, …\nOutgoing routing strategy …"