Go vs Ruby

Side-by-side comparison of Go and Ruby — syntax, concurrency, and trade-offs.

Ruby favors developer happiness and expressiveness. Go favors simplicity, performance, and explicit error handling. Both are excellent for building services — the choice depends on your priorities.

Feature Go Ruby
Typing Static, compiled Dynamic, interpreted
Variable x := 42 x = 42
Function func add(a, b int) int { return a + b } def add(a, b) = a + b
Array / Slice nums := []int{1, 2, 3} nums = [1, 2, 3]
Map m := map[string]int{"a": 1} m = { "a" => 1 }
Struct / Class type User struct { Name string } User = Struct.new(:name)
Error handling result, err := doThing(); if err != nil { ... } result = do_thing rescue nil
Loop for i := 0; i < 5; i++ { } 5.times { |i| }
Iteration for _, v := range nums { } nums.each { |v| }
String interp fmt.Sprintf("Hello %s", name) "Hello #{name}"
Concurrency Goroutines + channels Threads + Queue
Module system Packages via import require / gem
Testing go test built-in rspec gem
Compilation Compiled to binary Interpreted
Startup time Fast Slow (Rails尤其)

Concurrency Comparison

Go — Goroutines & Channels

ch := make(chan int, 2)
go func() { ch <- 42 }()
val := <-ch

Ruby — Threads & Queue

queue = Queue.new
Thread.new { queue.push(42) }
val = queue.pop

Go’s goroutines are lightweight (~2KB stack) and multiplexed across OS threads. Ruby threads are OS-level and limited by the GIL for CPU work.

When to Choose Go

When to Choose Ruby