手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Go

一步一步学gin

从13年之后就再也没有碰过GO,当时遇到的问题都很妖,所以后来就再也没碰过(为什么我的需求都那么怪?)

 

重操GO,准备花上1~2周温习,直接上项目吧,这个网址不错:https://github.com/EDDYCJY/blog,简单的教程,等我看完先

gogs 0.6.1版二进制打包文件缺少start.sh

在gogs的release包中,linux_amd64.zip这个包里,scripts目录下没有start.sh这个文件,因此在 执行./scripts/gogs_supvisor.sh文件的时候会直接后/usr/local/bin/gogs_start文件不存在

打开这个gogs_supvisor.sh文件后,发现他会判断/usr/local/bin/gogs_start文件是否存在,如果不存在就将./scripts/start.sh文件复制 过去并改为为gogs_start

然而,scripts目录下并没有这个start.sh文件,这个问题在官方的issue中已经提出并有解决方案:https://github.com/gogits/gogs/issues/1198

解决方案就是:

XML/HTML代码
  1. oh man sorry for that.  
  2.   
  3. I would suggest install supervisor as init.d somehow doesn't worked for me after trying lot of diffrent combinations. to do that,  
  4.   
  5. sudo apt-get -y install supervisor  
  6.   
  7. and edit its file via  
  8.   
  9. sudo nano /etc/supervisor/supervisord.conf  
  10.   
  11. [program:gogs]  
  12. directory=/home/git/go/src/github.com/gogits/gogs/  
  13. command=/home/git/go/src/github.com/gogits/gogs/gogs web  
  14. autostart=true  
  15. autorestart=true  
  16. startsecs=10  
  17. stdout_logfile=/var/log/gogs/stdout.log  
  18. stdout_logfile_maxbytes=1MB  
  19. stdout_logfile_backups=10  
  20. stdout_capture_maxbytes=1MB  
  21. stderr_logfile=/var/log/gogs/stderr.log  
  22. stderr_logfile_maxbytes=1MB  
  23. stderr_logfile_backups=10  
  24. stderr_capture_maxbytes=1MB  
  25. environment = HOME="/home/git", USER="git"  
  26.   
  27. change directory's to match your installation and user to your git user. and restart the supervisor via,  
  28. sudo service supervisor restart  
  29.   
  30. that's all you need to make gogs start automatically on boot.  

看上述内容,修改一下supervisor的配置,加入gogs的配置,注意修改成你自己的路径即可

Tags: gogs

NSQ

突然发现好象很久没有写过东西了。自从到了现在的公司,好象很多精力都放在了整理需求和写功能需求上面,代码啥的确实写的少了。

之所以提到nsq是因为我在写东西的时候发现点事情。其实好象可能用nsq处理会更好。
去年在想nsq的时候是写类似聊天室的玩意。当时就在想。nsq的一个topic是不是就相当于一个聊天室?在里面pub和sub,不就是一个正常的聊天过程吗?但最终还是没有用nsq。却自己实现了一个烂玩意
 
这两天我想到它,是因为nsq很多人还是当成一个队列来处理,那么基于go的队列?
如果我在抓取数据的时候,由主服务器向某一个topic发送要抓取的信息,其他订阅这个topic的程序就可以收到这个信息。然后开始解析并处理。这样是不是可以解决类似于中心服务器和其他采集服务器的事情呢?
 
然后找了下,phpnsq和pynsq都已经有人实现了。看起来好象是时候可以用它来尝试了?(http://bitly.github.io/nsq/clients/client_libraries.html)
最后提一句:phpnsq用的是reactPHP。
 
好了,半夜不写东西了。我继续 摸一下,好象nsqadmin有点意思。。
 

粗心安装go

由于buyvm的内存其实很少,所以我如果跑apache+php,担心会卡。所以我想是不是可以跑个go呢?

这不,我眼睛一闭,就参考http://golang.org/doc/install进行安装了。
 
然后到:https://code.google.com/p/go/downloads/list 兴冲冲的下载了go1.1.2.linux-amd64.tar.gz,就安装官方的教程开始了,因为我没有装过go,所以就直接tar -C 了
 
然而,运行的时候告诉我:-bash: /usr/local/go/bin/go: No such file or directory
 
当时我就纳闷了。这是怎么回事?难道他用的类库我没有更新?因为我是11.04的版本。所以我就apt-get update了一下,结果突然看到一条信息:Failed to fetch http://archive.ubuntu.com/ubuntu/dists/natty/main/binary-i386/Packages
 
等等,i386??不是amd64?心里仿佛突然明白了很多,于是施施然下载了一个:go1.1.2.linux-386.tar.gz,安装完毕后,运行go,直接就出来了。
 
细心才能解决问题。

利用 goquery 来取数据

 早期抓取数据都是偷懒用phpquery。用起来真心方便啊。刷刷刷的数据就取回来了。毕竟phpQuery还是相当模拟了jQuery的操作的。但现在在用go。怎么办?

其实go也有类似的工具,比如goquery,但使用起来确实不如phpQuery方便。举个小例子说明一下吧:

获取li数据中的第二个数据,那么jquery一般是这样写:$('li:eq(1)'),phpQuery呢。基本上也这样。pq('li:eq(1)'),但到了goquery就不能这样写了。我开始这样写的时候一直取不到数据。后来 才发现。。原来goquery必须得这样写:doc.Find("li").Eq(1)。虽然phpquery等也有类似方法,但如果放在Find里面不就好了嘛。真是的

OK写个简单的例子。。

XML/HTML代码
  1. var doc * goquery.Document  
  2. var e error  
  3. if doc, e = goquery.NewDocument(PROXY_FOREIGN_PAGE_URL); e != nil {  
  4.     ConsoleLog(e)  
  5.     return ;  
  6. }  
  7. doc.Find("tr ").Each(func(i int, ss * goquery.Selection) {  
  8.     s := *ss.Find("td");  
  9.     if s.Length() == 6 {  
  10.         port , _ :strconv.Atoi(s.Eq(1).Text());  
  11.         if port > 1 {  
  12.             var pInfo ProxyInfo  
  13.             pInfo.Ip = IpString(s.Eq(0).Text());  
  14.             pInfo.Port = PortString(s.Eq(1).Text());  
  15.             ProxyInfoLists = append(ProxyInfoLists , pInfo);  
  16.         }  
  17.   
  18.     }  
  19. })  
goquery的项目地址是:github.com/PuerkitoBio/goquery

Tags: goquery, phpquery

Records:3812345678