Google I/O 2011 的官方视频大部分都已经放出了。昨天 Golang 团队也发布了 Google I/O 2011 上关于 Go 的相关视频。
由于众所周知的原因,大家不能拜访“油吐伯”。所以视频我放到土豆上了。
大家看到的这个蓝色毛绒公仔叫“Gopher”,很有爱的 Golang 吉祥物,这次也出现在 Google I/O 2011 的现场。
不知道能不能搞到一个正版的。其实我严重怀疑这个来自悉尼的公仔是东莞产的……你们懂……
最近看到许多朋友都在问类似的问题:Go 能做什么?Go 有实际应用吗?敢不敢在实际项目中使用 Go 呢……
正好,golang 的博客刊登了 Heroku 的两个系统工程师关于 Go 语言在他们的分布式系统中的应用的文章。
大家还记得 Doozer 吗?对,我之前有过翻译高速数据同步服务器——Doozer。貌似就是这群优秀的工程师搞出来的杰作。他们作为 go 语言应用的先行者,的确值得我们关注他们的工作,学习他们的经验,并向这群优秀的工程师致敬!
原文在此:http://blog.golang.org/2011/04/go-at-heroku.html
——————————-用于致敬的翻译分割线——————————-
本周的博客内容是由 Heroku 的系统工程师 Keith Rarick 和 Blake Mizerany 撰写的。用他们自己的话说,他们“吃、喝、睡在分布式系统上”。这里讨论了一些他们应用 Go 的经验。
构建分布式系统的一个巨大的问题是物理服务器之间的协作。每个服务器需要知道关于系统整体上的各种情况。这些关键数据包括锁、配置数据等等,而即便是在数据存储异常的情况下,这些也必须是一致并且可用的。因此,需要一个有着绝对一致保障的数据存储。对于这个问题的解决方案是 Doozer,一个用 Go 编写的、新的、一致性的、高可用的数据存储。
(more…)
对于一个不稳定的语言,删删改改什么的都是常事。即便是稳定的语言,也逃不过隔三差五整修一下的命运。于是 Golang 大修是个麻烦。
用 Golang 的好处是你正在使用世界上最聪明的一群科学家和工程师的杰作。于是,升级这些麻烦事变得不那么麻烦了,因为有了 gofix。
原文在此:http://blog.golang.org/2011/04/introducing-gofix.html
——————————-翻译分割线——————————-
下一个 Go 的发布版将会包含多个官方 Go 包 API 的重大变化。实现 HTTP 服务器处理、调用 net.Dial、调用 os.Open,或者使用反射的代码如果不使用新的 API 升级,将无法编译。现在的发布已经相当稳定并且不那么频繁了,这将会成为一个常态。每次的 API 变化发生在每周的快照版本之间,并且可控;总之,无论如何,这带来了大量需要手工更新的已有代码。
(more…)
由于众所周知的原因,强大的 GFW 会引起 Go 语言编译时在对DNS相关进行测试时失败。当然如果人品不错,没有公网连接,不受GFW的影响……还是会在网络相关的那部分包的测试中失败。导致无法正常安装 Golang。
错误信息类似如下形式:
... test math test mime test mime/multipart test net TEST FAIL net make[1]: Entering directory `/home/mikespook/bin/go/src/pkg/net' gotest -test.short -test.timeout=120 rm -f _test/net.a 8g -o _gotest_.8 cgo_stub.go dial.go dnsmsg.go fd_linux.go hosts.go ip.go ipsock.go iprawsock.go lookup.go net.go parse.go pipe.go sock.go tcpsock.go udpsock.go unixsock.go newpollserver.go fd.go file.go dnsconfig.go dnsclient.go port.go dialgoogle_test.go dnsname_test.go file_test.go hosts_test.go ip_test.go ipraw_test.go multicast_test.go net_test.go parse_test.go pipe_test.go port_test.go server_test.go srv_test.go timeout_test.go rm -f _test/net.a gopack grc _test/net.a _gotest_.8 --- FAIL: net.TestLookupCNAME (0.02 seconds) LookupCNAME("www.google.com.") = "www-g-com-chn.l.google.com.", <nil>, want "www.l.google.com.", nil FAIL gotest: "./8.out -test.short=true -test.timeout=120" failed: exit status 1 make[1]: *** [testshort] Error 2 make[1]: Leaving directory `/home/mikespook/bin/go/src/pkg/net' make: *** [net.testshort] 错误 1
解决这个问题的办法很简单,之前在推上我也有发过。但是自己安装 Golang 的时候遇到网络异常,却经常忘记这个设置,接二连三的要动手查 Makefile 。随记录于此,方便备查。
(more…)
昨天在讨论平台新架构的时候,还在说要搞个配置管理的服务出来,方便接口的管理。然后今天就看到了这个……人品爆发了吗?
好吧,不扯淡,直接翻译 Doozer 的 README 吧。Doozer 我还没实测,不过感觉,如果真得像 README 上面说得那样,还是很有用,很有用的。
关键——这个玩意提供了 go 的接口。(补充一点,忘了说了,这个是用 go 开发的)
项目代码托管于此:Doozer。
———————-翻译分割线———————-
Doozer 是高可用的,完整一致性的用于小量、极端重要的数据的存储。当数据变化时,它立刻通知接入的客户端(不缓存),对于那些很少更新,但是希望更新发生时实时性高的客户端来说是非常理想的。Doozer 对于名字服务、主数据库选取和多个设备之间的配置数据同步很适合。了解什么时候应该使用它?下面,有详细的信息。
(more…)