![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
HopingWhite
这个作者很懒,什么都没留下…
展开
-
如何找回存储在ssh客户端中的密码
最近碰到一件蠢事儿,有个服务器的ssh密码给忘记了,找来找去后来发现只有在一台电脑的ssh客户端mobaxterm里存储了,找了一圈发现客户端里存储的都是加密后的密码,没法显示明文(mobaxterm比较奇葩付费就可以获得明文)。后来想来想去自己写了个fake ssh-server专门用来打印登录时的用户名密码,用go也就几行,分享一下package mainimport ( "github.com/gliderlabs/ssh" gossh "golang.org/x/crypto/ssh"原创 2020-06-09 14:16:21 · 7518 阅读 · 0 评论 -
一些有关go的优秀blog
决定最近好好看看邮件组的邮件,先从收集优秀的blog开始吧http://blog.nella.org/ 暂时没啥评论原创 2010-11-09 11:36:00 · 2520 阅读 · 0 评论 -
go语言很给力呀
<br />最近因为项目需要,所以写了一个id生成器,于是当时想为了省事就用go语言来写得了,于是花了大概半天的时间写了300多行码,完成之后开始测性能。一开始是在自己的虚拟机上测的,客户端是用php的,结果发现php在单进程环境下只能跑30个请求,这个结果其实也不意外,因为这根本就不是服务器的问题,而是php本身的性能不行,所以压力压不上去。于是用pcntl_fork出多个进程来,每个进程跑一些请求,最后在主进程里计算总的时间,结果发现1s最多处理1000-2000之间,并且随着并发数增多,性能下降很快。原创 2011-05-26 20:27:00 · 3896 阅读 · 0 评论 -
如何根据interface得到实际的实现
在go语言中如何根据interface得到具体实现呢?有两种方式,一种是通过type assertion,一种是switch,一般来说switch会比较好一些 具体使用如下: switch value.(type) {case Type1:case Type2:}原创 2011-06-08 10:24:00 · 1525 阅读 · 0 评论 -
如何在cygwin上编译golang
基本步骤如下:1、安装hg$ wget http://peak.telecommunity.com/dist/ez_setup.py$ python ez_setup.py$ easy_install -U mercurial2、下载代码hg clone https://golang-on-cygwin.googlecode.com/hg/ golang-on-cygwin原创 2011-11-17 20:15:15 · 4487 阅读 · 0 评论 -
一个介绍go语言实现的集合文章
http://code.google.com/p/try-catch-finally/wiki/GoInternals原创 2011-11-18 18:04:37 · 2712 阅读 · 0 评论 -
goamf
最近需要对服务器进行压力测试,因为需要模拟几千用户同时在线时的服务器响应情况,如果用php或者其他脚本语言来写的,压力可能压不上去,而如果用c或者c++来写的话,用时又比较久,因此决定用go来写,但是由于通信协议是amf3,因此写了一个amf3库的go语言版本,有需要的同学可以从https://github.com/lazytiger/goamf得到。原创 2011-12-06 15:46:40 · 2012 阅读 · 2 评论 -
go支持windows下直接编译了
新的weekly tag终于支持windows下的go编译了 需求:1、mingw,由于windows下的go是利用mingw编译的2、hg,windows下可以用TortoiseHg 注意在path上加上hg和mingw的目录 然后先利用TortoiseHg来clone代码,然后进入go/src直接运行all.bat就可以了原创 2012-02-08 17:07:15 · 2613 阅读 · 0 评论 -
golang里如何将一个struct指针转换成slice
废话不说了,直接上代码package mainimport "unsafe"import "fmt"func abc() { type T struct { a int b int c int } type SliceHeader struct { addr uintptr len int cap int } t := &T{a: 1, b:原创 2013-03-12 11:18:04 · 5703 阅读 · 0 评论 -
golang中的defer panic recover
大家都知道golang里的panic相当于其他语言里的throw,而recover相当于其他语言里的cacth,可是由于golang的recover机制要求必须在defer的函数里才能执行catch panic大概意思如下func protect(g func()) { defer func() { log.Println("done") // Println exec原创 2013-04-18 10:22:21 · 4308 阅读 · 2 评论 -
golang新版本对于cgo支持的一个坑
文件test.h如下#ifndef _TEST_H#define _TEST_H#ifdef __cplusplusextern "C" {#endifextern void myTest();#ifdef __cplusplus}#endif#endif文件test.cc如下#include "_cgo_export.h"extern原创 2013-11-12 17:08:35 · 9542 阅读 · 2 评论 -
利用golang中的chan数据类型来实现简易连接池
chan其实是一个队列,而且是一个带有锁等待功能的队列,因此用它可以做很多任务队列相关的工作,比如说连接池。最近打算用go来写一个小的软件配置管理系统,使用中发现没有连接池,于是就是chan写了一个简单的,使用了一下发现相当好用。var MySQLPool chan *mysql.MySQLfunc getMySQL() *mysql.MySQL { if MySQLPool == nil { MySQLPool = make(chan *mysql.MySQL, MAX_P原创 2010-12-30 14:11:00 · 14087 阅读 · 4 评论 -
go中的array
<br />今天来说一下go里面的array。要对go中的array进行了解,就需要知道go中的另外一个概念slice,而要知道slice你又要知道new和make的区别,而要知道new和make的区别你又得了解value,pointer,reference的区别。下面我们来逐一看一下这些概念。<br />1、value, pointer以及reference<br />这些概念其实与其他语言是一样的,但是我们在这里单独提出来说这个是因为在go语言里都是使用value的,因此如果将一个array赋值给另外一原创 2010-11-05 07:28:00 · 2899 阅读 · 1 评论 -
用gdb来调试go程序
<br />一直想用gdb来对6l/6g/6a阅读一下代码,结果却总是行数对不上,在go-nuts上问了一下,结果大家讨论到最后讨论成了怎么给6g/6l/6a生成的代码加gdb信息了(我第二天看到邮件时那个汗呀,英文似乎不至于差到这个程度)。今天想来想去觉得应该还是gcc的参数总是,没办法,对这个东西又不熟,那就只有采用一个参数一个参数删除的策略了,结果终于发现-O2这个参数会导致gdb无法进行。这样总是就简单了,google一下gdb O2,还真发现不少文章,其中http://blog.csdn.net/原创 2010-06-30 14:48:00 · 3565 阅读 · 0 评论 -
阅读go语言源代码2
<br />上回说到6g程序应该如何看,这回书接上文,从yylex这个函数看起。vim -t yylex仍然选gc那个。<br />1107 int321108 yylex(void)1109 {1110 int lx;1111 1112 lx = _yylex();//主要处理函数1113 1114 if(curio.nlsemi && lx == EOF) {1115 // if the nlsemi bit is set, we'原创 2010-07-05 10:48:00 · 2502 阅读 · 0 评论 -
golang中的xg作用
<br />前面的文章里大概说过一些如何阅读xg的源代码的东西,但是后来由于太懒了,总是不想写一些很系统的东西,所以感觉还是把一些值得说的大概写一点,做个备忘。<br /> <br />事实上xg的通用的内容都被放在了src/cmd/gc里,而整个编译阶段最重要的东西就是go.y这个文件,因为这个是bison的语法定义文件。事实上go在编译阶段也只是将所有的内容按语法分析的结果放入NodeList这个数据结构里,然后export写成一个*.6(比如amd64的架构),这个.6的文件大概是这样子的:<br /原创 2010-08-02 15:46:00 · 2874 阅读 · 0 评论 -
goinstall
<br />使用goinstall可以帮助你直接安装go的所有扩展应用,使用方法很简单,首先去http://godashboard.appspot.com/package找到你想到安装的包,比如我们想要安装gotags,那么就会找到它的地址为bitbucket.org/sigpipe/gotags,接下来直接运行goinstall bitbucket.org/sigpipe/gotags 就会在你的$GOROOT/src/pkg/bitbucket.org/sigpipe/gotags里找到这个扩展原创 2010-09-07 13:57:00 · 2177 阅读 · 0 评论 -
一个go语言宣传的视频
<br />http://v.youku.com/v_show/id_XMjE0MzQ4OTY4.html原创 2010-10-13 14:03:00 · 1364 阅读 · 0 评论 -
go语言中的反射的使用
<br />今天尝试了一下使用go语言中的反射来将struct类型转换成xml,结果相当纠结。首先去看了一下go的reflect包的实现,根据go的规则,首先应该去看一个NewXXX的方法,结果发现了一个叫NewValue的方法,通过这个方法我们能够得到一个Value接口。另外我们还应该注意到,go的反映实现中将Type和Value分开了,于是还有另外一个接口Type.<br />type Value interface { // Type returns the value's type.原创 2010-12-24 19:32:00 · 8557 阅读 · 3 评论 -
go语言中的interface与c++中的template
<br />这两天在使用c++的时候发现go语言中的interface其实与c++中的template有异曲同工之处。比如template同样只需要参数满足某些条件即可,而不需要参数一定符合继承关系,在这一点上go语言也是一样的。在c++中通过template可以部分实现继承所达到的效果,同样的道理利用interface在go中也可以实现继承。并且在很多情况下这更好用,因为一层层继承是一件很恶心的事情,这也是为什么java发展到今天越来越重量级的原因,继承使用的越多,程序将会越重量级。原创 2010-12-24 19:37:00 · 2254 阅读 · 0 评论 -
利用golang实现与boost中asio相同的功能
<br />今天在地铁上的时候突然想到,其实可以利用go中的channel轻易实现asio中的异步功能。其实asio主要借助了函数变量来将代码封存,而它之所以这么做是因为c和c++都不支持反映,这一点在go里根本就不存在任何问题,直接用反映就可以搞定。而在go中异步执行也会很简单,因为channle天然就是一个队列,我们一开始只需要指定channel的buffer(这一点比asio要更好用,因为通过buffer的大小我们可以解决异步程序无法解决的流量控制问题),然后将要执行的代码丢给channel,一个专门原创 2010-12-24 19:45:00 · 2941 阅读 · 2 评论 -
go作为web容器与php的性能比较
用go写了一个web程序,测了一把性能,发现结果如下:并发数 响应时间(每100000个请求)10 16.489387100 20.436091000 51.357626而php的同样程序,在fastcgi方式下,测试结果如下:并发数 响应时间(每100000个请求)10 62.194685 100 81.1035871000 103.441608结论:随着并发数的增大,go的处理能力波动比php还大。看来go语言还需要很长的时间来完善呀。原创 2010-11-03 14:48:00 · 10015 阅读 · 4 评论 -
goinstall中遇到的一个问题
<br />前两天在使用goinstall安装gofcgi模块时,报了一个git不支持http的问题,上网查了一下,说是因为在build git时本机没有curl,可是我看了一个我的机器上是装了curl的,于是又重新编译了一把,还是报这个错。后来想了想,还是更新一下curl,把它更新以最新吧,于是yum search curl了一下,发现curl有两个版本,一个是普通版,一个是curl_devel版本的,这个时候才恍然大悟,原来我应该安装curl_devel版本,而实际上本机装的是curl,因此在编译时根本原创 2010-11-05 06:22:00 · 1407 阅读 · 0 评论 -
关于go语言
从go语言刚出来时就看过了一些介绍,也用go语言写过几个小程序,(hello world之类,哈哈),但是当时没有什么特别的感觉,比较郁闷的是group.google.com被墙了,因此上go-nuts讨论组还要翻墙,自从tor又被禁了之后,连翻墙也懒的动了,于是有几个月没有再关注go的进展。最近突然想到google的讨论组可以通过邮件的(太脑残了,这个都没有想到),于是又重新开始关注go语言。前段时间大概看了一遍tutoiral,还有speicfication,总算是明白了go语言的目标:号称“系统级开发原创 2010-06-30 11:06:00 · 1929 阅读 · 1 评论