Month: April 2011

  • 【翻译】Go 在 Heroku

    最近看到许多朋友都在问类似的问题:Go 能做什么?Go 有实际应用吗?敢不敢在实际项目中使用 Go 呢……

    正好,golang 的博客刊登了 Heroku 的两个系统工程师关于 Go 语言在他们的分布式系统中的应用的文章。

    大家还记得 Doozer 吗?对,我之前有过翻译高速数据同步服务器——Doozer。貌似就是这群优秀的工程师搞出来的杰作。他们作为 go 语言应用的先行者,的确值得我们关注他们的工作,学习他们的经验,并向这群优秀的工程师致敬!

    原文在此:http://blog.golang.org/2011/04/go-at-heroku.html
    ——————————-用于致敬的翻译分割线——————————-
    本周的博客内容是由 Heroku 的系统工程师 Keith RarickBlake Mizerany 撰写的。用他们自己的话说,他们“吃、喝、睡在分布式系统上”。这里讨论了一些他们应用 Go 的经验。

    构建分布式系统的一个巨大的问题是物理服务器之间的协作。每个服务器需要知道关于系统整体上的各种情况。这些关键数据包括锁、配置数据等等,而即便是在数据存储异常的情况下,这些也必须是一致并且可用的。因此,需要一个有着绝对一致保障的数据存储。对于这个问题的解决方案是 Doozer,一个用 Go 编写的、新的、一致性的、高可用的数据存储。
    (more…)

  • 【翻译】gofix 介绍

    对于一个不稳定的语言,删删改改什么的都是常事。即便是稳定的语言,也逃不过隔三差五整修一下的命运。于是 Golang 大修是个麻烦。
    用 Golang 的好处是你正在使用世界上最聪明的一群科学家和工程师的杰作。于是,升级这些麻烦事变得不那么麻烦了,因为有了 gofix。

    原文在此:http://blog.golang.org/2011/04/introducing-gofix.html
    ——————————-翻译分割线——————————-

    gofix介绍

    下一个 Go 的发布版将会包含多个官方 Go 包 API 的重大变化。实现 HTTP 服务器处理调用 net.Dial调用 os.Open,或者使用反射的代码如果不使用新的 API 升级,将无法编译。现在的发布已经相当稳定并且不那么频繁了,这将会成为一个常态。每次的 API 变化发生在每周的快照版本之间,并且可控;总之,无论如何,这带来了大量需要手工更新的已有代码。
    (more…)

  • 网络原因引起的 Golang 编译错误

    由于众所周知的原因,强大的 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

    昨天在讨论平台新架构的时候,还在说要搞个配置管理的服务出来,方便接口的管理。然后今天就看到了这个……人品爆发了吗?
    好吧,不扯淡,直接翻译 Doozer 的 README 吧。Doozer 我还没实测,不过感觉,如果真得像 README 上面说得那样,还是很有用,很有用的。

    关键——这个玩意提供了 go 的接口。(补充一点,忘了说了,这个是用 go 开发的)
    项目代码托管于此:Doozer
    ———————-翻译分割线———————-

    Doozer

    这是什么?

    Doozer 是高可用的,完整一致性的用于小量、极端重要的数据的存储。当数据变化时,它立刻通知接入的客户端(不缓存),对于那些很少更新,但是希望更新发生时实时性高的客户端来说是非常理想的。Doozer 对于名字服务、主数据库选取和多个设备之间的配置数据同步很适合。了解什么时候应该使用它?下面,有详细的信息。
    (more…)

  • Learning Go 中文版本《学习Go语言》

    是的,你没看错,这就是 Learning Go 的中文版本。在我踌躇许久之后,终于决定将这个坑挖下去了。

    项目页面在这里:《学习Go 语言》

    现在的翻译进度大约10%,也就是完成了第一章和部分第二章内容。
    我对 LaTeX 知之甚少,所以排版还没时间去调整。

    第一阶段目标是同步翻译英文版本,并跟进英文版本的后续修改。
    第二阶段目标待 Go 语言相对稳定后,根据中文表达习惯重新调整内容和表达方式。
    大体如此吧……

    (more…)

  • 【翻译】Godoc:文档化 Go 代码

    各位童鞋,愚人节好!由于鄙人愚钝,过不了这种高端节日,所以就不过节了。
    所以今天即不会有鄙人要改名叫 mikeghost 的消息,也不会有诸如在 Android 上跑 iOS 应用的消息出现,当然,大家更不需要穿越的有木有来阅读本文。
    生活还要继续……
    原文《Godoc: documenting Go code》在此:http://blog.golang.org/2011/03/godoc-documenting-go-code.html
    —————-翻译分割线—————-

    Go 项目对待文档的态度是严肃的。文档是让软件易于处理和维护的重要的组成部分。当然,它必须编写良好并且准确,而且必须容易编写和维护。理想情况,它应当同代码在一起,这样文档就可以伴随代码一起更新。程序员建立良好文档越简单,对所有人好处越多。

    最终,我们开发出了godoc文档工具。这个文章说明了用 godoc 生成文档的方法,以及解释了在你自己的项目中如何使用我们的约定和工具编写良好的文档。
    (more…)