新しく始めることはなんとなくアウトプットしたくなってついつい書いてしまいます。
今年は社内でGoLang(以下、Go)に挑戦していこうと思い、昼休みに写経用の環境を整えてみた。
Goとは
Google社によって開発されたプログラミング言語。登場時期は2009年。マスコットキャラクターはGopherくん(かわいい)。
構文はC言語に似ています(C言語開発者のケン・トンプソンが開発に関わっている)。
今、他記事で書いてるDockerの実装もGoです。
とてもシンプル
Goはとてもシンプルで、乱用するとプログラムを無意味に複雑にしてしまう機能がことごとく排除されています。
覚えることが少ないということは、経験によるスキルの差は、他のプログラミング言語ほど顕著に表れることがないでしょう。
(これ、社内教育での結構な悩みなんです)
反面、つまらない言語と言ってもよいかもしれません。
非知的なプログラマのためにデザインされている
こういうことをよく言われているわけですが、これに関してもGoがそのようにして生まれた訳があります。
Google社員のような、研究者ではなく大学を出たばかりでC++, Java, Pythonの経験しかない「素晴らしいプログラミング言語」を理解する能力が欠けているエンジニアでも簡単に理解し、大きなシステムを構築するのに使えるようにGo言語はデザインされているのです。
Goは言語デザインとして正しく使うのが難しい、乱用するとプログラムを無意味に複雑にしてしまう機能が排除されています(高度な型システム・継承・Generics・例外・イベントモデルによる並行処理など)。 そのため、ある意味ではGoは「知的な」プログラマにとっては面白みに欠く言語だと思います。実際、Goを勉強しても概念的には目新しいものはなくて勉強することそのもので何かが学べるとは僕は全く思いません。 一方でプログラミング言語を習得することのゴールは、それを使って何か大規模なソフトウェアをチームで作ることであるのだと思います。 チームで大規模なソフトウェアを開発することはそれ自体が非常に難しいことです。そのゴールのためにプログラミング言語自体はシンプルに保ち、それ以外の部分により多くの労力をさけるようにするというのは僕は正しい判断だと思います。
「企業の中でプログラミング言語を習得することのゴールは、それを使って何か大規模なソフトウェアをチームで作ることにある。」
技術厨(私)の胸に刺さります(笑)
Windowsに写経環境を作る
開発用の環境はDocker上に構築しますが、ここでは完全に写経環境です。
(写経:その言語を書き慣れるためにする訓練のこと)
用意するものは2つ。
Goのインストーラ
Goを動かすのに必要な環境です。手っ取り早くmsi形式のものをどうぞ
https://golang.org/dl/
LiteIDE
Go専用?の統合開発環境です。使ってみた感じだとコード補完がとても優秀な気がする。
https://github.com/visualfc/liteide
試しにサンプルを作ってみた
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root@/test") if err != nil { panic(err.Error()) } defer db.Close() rows, err := db.Query("select * from test") defer rows.Close() if err != nil { panic(err.Error()) } for rows.Next() { var id int var name string if err := rows.Scan(&id, &name); err != nil { panic(err.Error()) } fmt.Println(id, name) } }
とても分かり易いですね。初見でわからなかったのはdefer。
これはGoの例外処理の特徴的なところで、エラーによってpanicした場合、確実に、この場合だとDBへの接続をクローズするということをするために用いるようですね。
(他の言語ではtry-catch-finaly)