1章レッツGo

私はこれまでに、C、Ruby、Python、JavaScript、Java、Elixir、Erlang、Bashなどを使ってプログラムを書いてきました。これらの言語には、それぞれ素晴らしい点がたくさんありましたが、常に少なくともいくつかのとても気になる点がありました。C言語にはモジュールがありませんし、Rubyは十分に速くないですし、JavaScriptとその型システムは自分が正気かと疑わせるようなもの、といったことです。つまり、それぞれの言語には、料理人が使うさまざまなナイフのように、特定の使用目的があったのです。たとえば、料理人は大きな骨を切るときに大包丁を使います。同様に、私がJavaを使うのは、大きなオブジェクト指向プログラムを書くときで、プログラムを開始してから実行する準備ができるまでにお茶を飲みたいときです†1。料理人は小さくて繊細な切り口を作るときに果物ナイフを使いますが、私は小さくてポータブルなスクリプトを書くときにBashを使います。でも、ほとんどの場面で使えて、自分をイライラさせないような言語があればいいのに、といつも思っていました。

最終的に私は、次のことが可能なGo言語に出会いました。

  • Rubyのようなインタプリタ言語よりも高速にプログラムをコンパイル、実行できます。
  • 高度に並行なプログラムを書けます。
  • オペレーティングシステム上で直接動作します。
  • パッケージといった現代的な機能を使えます(一方で、クラスのように必要のない多くの機能を除外しています)。

「Goにはもっと多くの機能があるから、何か気になることがあったはずでは」と思われるかもしれません。しかし、そうではありませんでした。まるでGoの設計者が、他の言語で私を悩ませていたものをすべて取り除いて、無駄のない素晴らしいプログラミング言語であるGoを作ったかのようでした。Goは、私が初めてプログラミングに夢中になったのと同じ感覚を与えてくれました。何か問題があれば、それは私のせいであり、言語の機能の多さで私が混乱させられているのではなく、私自身が単に誤っているということです。Javaが大包丁で、Bashが果物ナイフなら、Goは刀です。侍は刀を自分の延長線上にあるものと考えていて、刀の達人になることを目指しながら一生を共にするものだと思っていました。それは、私がGoに対して感じていることと同じです。 ...

Get Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.