2010-04-11 18 views
7

我们想用Go来重写kodingen.com后端,它当前是 Java,使用jsvc作为守护进程运行。将Java应用移植到Go - 有何建议?

我从来没有碰过任何C在我的生活中,只有在Java的经验,所以我 不知道这是我什至应该开始。

然而,任务是从MySQL数据库

  • 队列很简单

    • 读取shell命令,并在平行
    • 执行它们各自外壳输出保存到数据库

    就是这样。所以这些简单的要求给了我希望,我可以用这个美妙的语言开始 。

    你会建议什么? C还是更好?

  • +3

    嘿,你是我听到在TWIST投球的球员?无论如何,只是好奇:Java有什么问题?为什么要去?只是好奇。 – cletus 2010-04-11 23:56:47

    +1

    是的,我是被打败的那个人:)但是我们之后在纽约市排名前5名的OAF中,杰森和泰勒很好。无论如何,原因是JVM吃了1,2GB的ram,否则会是100k C的守护进程。还有很多其他的原因,如由于apache exec commons等造成的随机崩溃。如果你有其他解决方案,请在这里分享,或者你也可以邮寄给我。 – Devrim 2010-04-12 00:26:22

    +2

    另外,为什么选择而不是C?因为,看Go的技术讲座,Rob Pike讲述了为什么我从未碰过C并说他把他们移除了的所有原因。并用系统语言添加了我希望的所有内容,他说他添加了它们。 – Devrim 2010-04-12 00:29:40

    回答

    3

    我喜欢去很多,并为项目做出了贡献。不过,我认为在确定之前,你应该考虑Go的一些事情。

    • Go仍然是一种不稳定的语言。其语法,功能和软件包都可能发生变化。如果你选择使用它,请确保你已经准备好了。
    • Go的垃圾收集仍然不成熟。你的内存使用量应该比1.2 GB好,但它可能不会让你接近C级。
    • 对MySQL(或任何其他数据库)没有核心支持。有几个非官方的MySQL软件包项目。最近更新的是 GoMySQLGo-MySQL-Client-Library。我不知道他们有多完整或稳定。

    至于排队和并行执行,我认为这是Go能够做得很好。你可能会使用exec包来执行和并行化goroutines。

    1

    我@Chickencha

    同意在这一点上我没有计划来更新我的[1]:http://github.com/chbfiv/libmysqlgo “libmysqlgo” 项目。捐款是受欢迎的,但我太忙了。我会建议使用更活跃的mysql去项目。

    1

    从去langugage FAQ:

    围棋项目的构想是,让 更容易写的那种服务器 和其他软件谷歌使用 内部的,但执行 是不太成熟足以应付 的大规模生产使用。

    据我所知,Go的垃圾收集器和调度程序还没有准备好。 而且它的编译器还不够优化,无论如何,C编译器已经改进了20年。 如果你想在生产现场使用它,等待Go变得足够成熟会更好。

    但这并不意味着Go不是一门学习的好语言。其实,我很乐意用它来开发一些有用的工具。

    编辑:在切换到另一种语言之前,如何使用即将推出的JDK 7进行一些实验。垃圾回收有一些改进。 你可以在你的情况下检查内存管理是否更好。

    +0

    谢谢Stephen,JDK7看起来不错,但我们需要的是一个linux守护进程而不是一个在封闭环境(jvm)中运行的程序,并且通过一些未知的方式与系统进行交互。为了说明我的观点,想象一下,如果apache是​​用Java编写的,那将是多么荒谬。 – Devrim 2010-04-13 01:58:27

    1

    我认为随着最近恐慌/恢复的加入,Go开始成为网站后端的可行选择。我一直在使用Go运行一些简单的Facebook应用程序,但是令整个应用程序出现类似地图键错误或空指针异常的情况令人沮丧。随着恐慌/恢复,它将有可能管理崩溃。

    关于您的要求 - 对于mysql和shell命令应该没问题。但准备补丁一些图书馆:)