tags:

views:

216

answers:

4

We want to rewrite kodingen.com backend with Go which currently is Java, running as daemon using jsvc.

I have never touched any C in my life, am only experienced in Java so I don't know if this is something that I should even start.

However, task is pretty simple

  • read shell commands from mysql database
  • queue and execute them in parallel
  • save each shell output to the database

that's it. So these simple requirements gives me hope that I can start using this wonderful language.

What would you advise? Is C still better ?

+3  A: 

I like Go a lot and have made contributions to the project. However, I think you ought to consider a few things about Go before settling on it for sure.

  • Go is still an unstable language. Its syntax, features, and packages are all subject to change. Make sure you're ready to keep up with this if you choose to use it.
  • Go's garbage collection is still immature. Your memory usage should be better than 1.2 GB, but it probably won't get you near C levels.
  • There's no core support for MySQL (or any other database). There are several unofficial MySQL package projects. The most recently updated ones are GoMySQL and Go-MySQL-Client-Library. I don't know anything about how complete or stable they are.

As for queuing and executing in parallel, I think that's something Go will be able to do pretty well. You'll probably use the exec package to execute and parallelize with goroutines.

Evan Shaw
+1  A: 

I agree with @Chickencha

At this point I have no plans to update my [1]: http://github.com/chbfiv/libmysqlgo "libmysqlgo" project. Contributions are welcome, but I'm too busy atm. I would recommend using more active mysql go projects.

chbfiv
+1  A: 

From the go langugage FAQ:

The Go project was conceived to make it easier to write the kind of servers and other software Google uses internally, but the implementation isn't quite mature enough yet for large-scale production use.

As I know, Go's garbage collector and scheduler is not ready yet. And its compiler is not optimized enough, anyway, C compiler has been improved for 20 years. If you want to use it in a production site, waiting for Go to be mature enough is better.

But that does not mean Go is not a good language to learn. Actually, I'm happily using it to develop some useful utilities.

EDIT: Before you switch to another language, how about making some experiments with the forthcoming JDK 7. There are some improvements in the garbage collection. You can check is the memory management better in your case.

Stephen Hsu
Thanks Stephen, JDK7 looks good but what we need is a linux daemon not a program that runs in a closed environment (jvm) and interfaces with the system through some unknowns. To illustrate my point, imagine how absurd it'd be if apache was written in Java.
Devrim
+1  A: 

I think with the recent addition of panic/recover, Go is starting to become a viable option for website backends. I've been running a couple simple facebook apps using Go, but it's frustrating having the entire app go down for something like a map key error, or a null pointer exception. With panic/recover, it'll be possible to manage crashes.

About your requirements - it should be fine for mysql and shell commands. But be prepared to patch some libraries :)

marketer