屈強な男性のブログ

チャンピオン・ジャンプの感想を中心に、日々の雑記とか諸々

Go言語って想像してたよりもやさしくないね。

ちょっとGo言語の勉強を進めるうちに、

「思ったよりシンプルじゃないぞ」ってことがわかってきた。

 

だいたいの原因はポインタ。

いちいちアドレスなのか値なのか考える必要があって

アタマがこんがらがってしまいますわ。

ダブルポインタとかもあるのかな?

C言語ライクのマニアックなテクニックが使えちゃうので、

ちょっとの工夫ですごくコード読みづらくなる。

やめてよね。

 

あと、クラスがない。ないのにある。

なにを言っているのかわからねーと思うが、俺にもわからん。

 

Goには構造体という「変数の固まり」をつくる機能はある。

構造体にメソッドは加えられない。

なるほど「構造体」はあるが「クラス」はない。

 

しかし、「仮引数」を使えば構造体にメソッドを加えられる。

それってつまり、Javaでいうクラスのことじゃんか。

どーせなら、変数とメソッドの両方を宣言するJavaのほうが潔いと思う。

 

ところで仮引数はJavaには無い概念だ。

GoはJavaよりシンプルだと思ってたけど、

新しい言語な分、仮引数とか高階関数とか

新しい概念が組み込まれていて、それなりに複雑だ。

 

もちろん新しいから簡略化された面がいろいろあって、

並列処理とかファイルの読み書きとか、

Javaではひたすら面倒なのが、えぇこんだけ?

くらい楽ちんになっている。体感的には100分の1だ。

 

しかし、ポインタがめんどくさい。

なんでこんなもん採用しちゃったのかね。

ポインタのほうが何かと処理速度が速いってのが理由だと思うけど。

 

参照渡しもポインタの特徴だけど、Goの場合は戻り値を複数返せるので、

引数のIN・OUTの旨味が無い。

 

やはり処理速度が目的としてポインタを採用したと思うけど、

だったら「基本型は値」「構造体はポインタ」という

Javaの方式でも良かったと思う。

 

どうせ「new」がポインタを返すと決まってるんなら、

「構造体はすべてポインタ!」と割り切ってくれたほうが良かった。

ついでに構造体は大文字で始まる命名規則にすれば尚わかりやすい。

・・・とはJavaに慣れた人間のたわごとですよ。

 

あと、すげーびっくりしたのは、

「標準のデバッガが存在しない」ってことなんだね!

 

Go言語には標準で

フォーマッタがあって、HTTPサーバがあって、テンプレートもある。

 

「おお、まるっと全部ついてくるじゃん」

と感心しまくっていたんだけど、イザ実装をしてみると、

デバッガが無い!標準の開発環境がない!

 

こいつはびっくりだ。フォーマッタなんて機能があって、

デバッガがないんだよ。

 

ネットで調べると、

デバッガはgdbを使えとある、

昔から使われているC++用のデバッガだという。Go用ですらない。

俺はこいつを使おうと試行錯誤してたんだが、上手く動かずに挫折した。

ほんと、5時間くらいアレコレ調べてたのに、ノー成果ですわ。

もがいて溺れて悪循環でしたわ。

 

Go言語は開発環境もない。

Javaなら「Eclipse」や「NetBeans」って定番があるけど

Goにはない。

LiteIDEってのが高性能だけど、デバッガが微妙だし・・・

SubLimeとかの気の利いたテキストエディタでの開発が普通みたいだね。

 

 

 

Javaに辟易して新しげな言語を調べてみたが、

新しいからって桃源郷ってわけじゃないね。

 

まあ、イロイロ活躍の場を広げているGoをいま抑えておくのは、

作戦としては悪くないはずだ。

デバッガできない不便を承知で、もうすこし深堀してみようかと思う。