channel in Go's runtime

Go语言有一个非常大的亮点就是支持语言级别的并发。语言级别提供并发编程,究竟有多重要,可能需要你亲自去体会多线程、事件+callback等常见的并发并发编程模型后才能准确的感受到。为了配合语言级别的并发支持,channel组件就是Go语言必不可少的了。官方提倡的一个编程信条——“使用通信去共享内存,而不是共享内存去通信”,这里说的”通信去共享内存”的手段就是channel。 channel的实现位于runtime/chan.c文件中。 channel底层结构模型 每个channel都是由一个Hc...阅读全文

skoo's notes 20 September 2013 skoo

timer in Go's runtime

我们总是使用sleep()类函数来让线程暂停一段时间,在Go语言里,也是使用Sleep()来暂停goroutine。 那么Go语言的sleep究竟是如何现实的呢?当然你翻看标准库中的time包里面的sleep.go源码时, 你可能会觉得看不明白,因为支持sleep功能的真正实现是在runtime里面。不难想到sleep功能是根据定时器来实现的, 因此接下来看看runtime中的timer究竟长什么样子。 timer的实现主要位于runtime/time.goc文件中。 主要数据结构 struct...阅读全文

skoo's notes 12 September 2013 skoo

Go 语言初步

这几天认真玩起了 Go。所谓认真玩,就是拿 Go 写点程序,前后大约两千行吧。 据说 Go 的最佳开发平台是 Mac OS ,我没有。其次应该是 Linux 。Windows 版还没全部搞定,但是也可以用了。如果你用 google 搜索,很容易去到一个叫 go-windows 的开源项目上。千万别上当,这是个废弃的项目。如果你用这个,很多库都没有,而且语法也是老的。我在 Windows 下甚至不能正确链接自己写的多个 package 。活跃的 Windows 版是 gomingw ,对于 Win...阅读全文

CSDN博客 2011-11-23 16:25 xtj332

Golang适合高并发场景的原因分析

转自:http://blog.csdn.net/ghj1976/article/details/27996095 典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力。 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) 目前接入的产品约1280万在线用户 2分钟一次GC,停顿2秒 (1.0.3 的 ...阅读全文

CSDN博客 2014-09-23 17:01 codemanship

【rubby phython Go】

假如你想帮他尽快找个活儿,赚到钱,推荐PHP。 假如你想让他成为一个高效工程师,推荐 Python。 假如你想让他爱上他的工作,推荐 Ruby。 Ruby on Rails 正在令整个 Web 开发领域受到震憾。 当时我也是怀着好奇,从j2ee转ruby的,不过没那么神奇,但是ruby开发的效率的确比j2ee高很多,但ruby永远都不能替代java的 在编程学习里有这么一个现象:直接推荐 Python 的人,基本都没深入学习过 Ruby。学过 Python 和 Ruby 的人,基本都喜欢 Rub...阅读全文

CSDN博客 2014-07-09 23:03 abestone

我为什么从python转向go语言

我为什么从python转向go语言 (2013-05-03 15:12:34) 转载▼ 标签: go语言 python it 分类: software 我为什么从python转向go语言 chenyehao@gmail.com 2013-5-3 标题总是要吸引眼球,其实我至今还是python的爱好者,每个人都需要用合适的工具解决特定问题。 我从2004年开始使用python,在那之前,我使用perl。python语法简洁,支持面向对象,支持异常处理,丰富的第三方代码库,极大地提高了开发效率。在那...阅读全文

CSDN博客 2013-10-30 11:28 legend_x

Windows下Go语言的环境搭建

在本地搭建了一个开发GO语言的开发环境,给大家分享一下用go语言写的第一个hello world的过程,希望对大家有所帮助。 1.想写GO语言首先得下载go语言的开发包 官方下载地址:https://code.google.com/p/go/downloads/list 我用的是Win7 64位的操作系统,截图如下: 2.把下载好的文件解压到你想解压的文件夹下,解压到的是C盘的根目录下,文件命名为go,然后是设置环境变量: 计算机->属性 ->高级系统设置 -> 环境变量 在系统变量里的Path...阅读全文

CSDN博客 2013-12-14 19:16 allyes001

windows go amd64 libiconv 缺失报错问题

windows amd64 的go环境使用的gcc环境带的libiconv库不匹配,使用iconv-go库的时候报错,就自己编译了一个 步骤如下,下载libiconv源代码http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz 解压,安装msys设置默认GCC是win64的版本,修改/etc/profile pathcc=/d/GNU/mingw/MinGW64/4.9.1/bin export PATH="$pathcc:/bin:/m...阅读全文

开源中国博客 2014-11-09 16:28 悠米海

golang讲解(go语言)标准库分析之os(4)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库 今天我们继续说os包,OK我们直接来 (1)os.Mkdir创建单个目录函数原形func Mkdir(name string, perm FileMode) error输入一个目录的名称和目录的权限,我们可以用默认的os.ModePerm然后返回的是一个error的信息,我们看下,也一块复习前边的一点知识 [php] import ( "fmt" "os" ) func mai...阅读全文

微度网络 2014-01-01 widuu

在delphi中使用go语言的并发编程方法

google的go语言除了它很酷的语法外,更吸引开发者的是类似coroutine的goroutine,个人觉得它比lua的coroutine更聪明一些,因为它能在运行时自动组合线程和纤程的能力。另外go语言认为线程间的数据应该通过channel通讯,而不是用地址。这些特点非常方便开发稳定的并发式程序,也提供了清晰的并发编程思路。 go的channel携带一个数据,用于在多个coroutine之间通讯,它容易控制,因为它的规则很简单:没有值时才可以写,否则suspend,有值时才可以读,否则也su...阅读全文

CSDN博客 2010-12-06 10:24 zzzl

database/sql: Stmt的使用以及坑

前言 众所周知,golang操作数据库,是通过database/sql包,以及第三方的实现了database/sql/driver接口的数据库驱动包来共同完成的。 其中database/sql/driver中的接口Conn和Stmt,官方交给第三方实现驱动,并且是协程不安全的。官方实现的database/sql包中的DB和Stmt是协程安全的,因为内部实现是连接池。 如何使用 刚开始接触database/sql包,并且网上的很多使用例子,都类似下面这种方式: db,err := sql.Open...阅读全文

猎豹移动技术博客 2014年11月8日 郝冠伟

golang讲解(go语言)标准库分析之os(3)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库 今天人我们继续分析os包,这个包其实很多估计还待几天我们才能分析完这个包–也谢谢大家的持续关注!!!我看网上搜索mac golang的比较多,我就也用mac os开发吧!截图我的环境 第一个我们讲的是os.IsExists()函数和os.IsNotExists(),他们的函数的原形是func IsExist(err error) bool func IsNotExist(err...阅读全文

微度网络 2013-12-31 widuu

Go语言实战 - 创业进行时之用户注册

用户注册、登录和注销是任何一个网站都必然会有的功能,可以说,这是重新造轮子做多的领域,每个做网站的人应该都做过很多遍。见微知著,从这么一个小功能其实就可以看到所使用的web框架中的大部分东西。 今天就让我们用这个基本模块来看看revel吧。 先整理一下我们选用的技术框架和组件: web框架:revel 数据库:mongodb 数据库driver:mgo 工欲善其事,必先利其器,这里着重推荐一个mongodb的GUI客户端 - mongovue,可以说,如果没有这个工具,在开发的过程中我们会痛苦许...阅读全文

CSDN博客 2013-07-02 13:22 u011274920

windows搭建golang开发平台

Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea、LiteIDE、Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj IDEA,但是Inteillj IDEA插件更新太慢,以及存在一些问题(go sdk版本支持为1.2,当前最新的SDK版本是1.4Beta)。LiteIDE是一个Gubit开源项目,现在已经更新至24.2版本。 搭建golang环境步骤,这里只介绍LiteIDE的。 1、下载golang SDK安...阅读全文

CSDN博客 2014-11-08 10:47 yugeCsc

Go RPC Benchmark

这篇完成得太折腾了,为了更好的展示benchmark的一系列结果数据,我必须得找个软件将数据进行图表化。以前在windows上基本都用execel画曲线图、柱状图等,但在linux/mac上却找不到顺手的工具了。我也使用过gnuplot,这货不知道是太专业,还是太古老的原因,始终用得不顺手、不开心。于是,我就决定自己先用Go和chart.js库折腾了一个goplot工具来绘制图表,然后再才开始写这篇博客。 有人可能会说我又在折腾轮子了,确实是折腾了一个轮子。话说,这又怎么样呢?作为一个程序员,最...阅读全文

skoo's notes 10 September 2013 skoo

Go RPC Inside (server)

说到rpc让我想起了刚毕业面试的时候,被问到是否了解rpc?我记得当时我的回答是“课本上学过rpc,只知道是远程过程调用,但没有用过,具体也不知道是什么”。的确,大学中间件这门课程里有讲到rpc,里面还引入了一个非常难理解的概念——“桩”,英文应该叫”stub”。现在的rpc实现里,stub这个概念好像都没见到了,应该都是叫”method”。 实现一个rpc服务器很难吗?rpc服务器也就是在tcp服务器的基础上加上自定义的rpc协议而已。一个rpc协议里,主要有个3个非常重要的信息。 调用的远程...阅读全文

skoo's notes 01 September 2013 skoo

Go RPC Inside (client)

Go语言标准库能够自带一个rpc框架还是非常给力的,这可以很大程度的降低写后端网络通信服务的门槛,特别是在大规模的分布式系统中,rpc基本是跨机器通信的标配。rpc能够最大程度屏蔽网络细节,让开发者专注在服务功能的开发上面。下面介绍Go语言rpc框架的客户端内部实现. Go rpc客户端的逻辑很简单,大体上,就是将一个个的调用请求序列化后原子的发送给服务器,然后有一个专门的gorutine等待服务器应答,这个goroutine会将收到的每个应答分发给对应的请求,这就完成了一次rpc调用。 调用入...阅读全文

skoo's notes 28 August 2013 skoo

Go语言学习(二):array、slices和map

前言 近来个多月忙于论文,各方面原因的综合,说多都是泪,等着结果了。关于Go语言的学习,本文的内容老早就学习了,之前时间也不知去哪了,而且也没心思,现在誊写上来吧。 数组array 定义形式: [n]<array>,n标示array长度,<type>标示类型。 // e.g: [32]byte // 长度32的数组,每个元素为1个byte [16]*float64 // 指针数组 [3][5]int // 二维数组 在Go语言中,数组长度在定义后不可更改。获取array元素个数方法:arrLen...阅读全文

CSDN博客 2014-05-11 15:34 fzy0201