52
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go入門 vol.1 〜Go言語の特徴〜

Last updated at Posted at 2015-02-14

はじめに

Go言語に入門します。第 1 回目になります。

A Tour of Go から入門するのが一般的らしいのですが、
今回は下記の教材を使って学習したいと思います。

教材

今回の教材は、「WEB+DB PRESS vol.82」に掲載されていた
「はじめてのGo」という特集を参考に、学習を進めたいと思います。
ちょっと前のものになってしまうのですが、先輩からオススメされたので採用しました。

著者の jxck さんのブログでも紹介されていました。ご参考まで。
Web+DB Press vol.82 で Go の特集を書かせて頂きました #wdpress - Block Rockin’ Codes

学習内容

今回は、

Go言語の特徴

について、簡単にまとめていきたいと思います。

箇条書きの箇所は、ほぼ引用部となりますが、
私なりに解釈し、自分の言葉で文章を補足してみました。
(ですので、その解釈間違ってますよ・・・という場合は、
 コメントでこっそりかつ大胆にご指摘いただけると幸いです。)

詳細が気になる方は、ぜひ実際の書籍をご覧くださいませ!

Go言語の特徴

Go言語の特徴は、ざっと以下の通りです。

シンプル イズ ザ ベスト

カタカナで書くとうさんくさいのはさておき、
Go 言語はとてもシンプルな言語です。私はシンプル好きです。シンプル万歳。

もちろん、Go 言語は「あえて」シンプルに保っているのです。
ほら、素朴なものこそ、噛めば噛むほど味がでるっていうじゃないですか・・・。

という冗談はさておき、
Go 言語がシンプルを保っている理由は、

  • コンパイルの高速化
  • 予期せぬミスの減少

というとても現実的な目的があります。

では、上記をどのように実現しているかをみていきましょう。

最小限の構文

Go 言語は、構文を最小限に保っています。

  • 表現方法を制限する。
  • コンパイルを遅くする原因となる構文を極力取り込まない。

(具体例)

  • 繰り返し構文は for 文のみ
  • if の波括弧は省略不可、三項演算子もなし ...などなど

ないない運動ですね!!!なななな〜い。
他言語であらゆる構文を使い慣れた方は、不便に感じるかもしれません。

しかし、上記の制限を設けることによって、

  • 開発者による表現のばらつきを抑えることができる。
  • 高速にコンパイルできる。

というメリットを得ることができます。

危険の回避

Go 言語では、危険を回避する仕組みが備わっています。

今流行りの、
「いや、ちょと待ってちょと待ってお兄さん」ってことだね。

コードは、追加するより削除する方が影響範囲が読みにくく、難しい

名言ですよね。コーディング標語大賞があったら間違いなく大賞ものですよ。

Go 言語では、危険の潜んだコードは自動的に(徹底的に?)排除する構造になっているようです。

  • 不要なコードの存在をコンパイル時に検出し、不要なコードが存在することを防ぐ

(具体例)

  • ポインタ演算(メモリリークの原因)を排除
  • 暗黙の型変換(意図せぬエラーの原因)を排除
  • 使われていない変数、インポートされたのに使われていないパッケージがあるとコンパイルが通らない ...などなど

こりゃ、なかなかコンパイル通すの大変だぜ・・・と思ったそこのあなた、
キチャナイコーディング検定1級ですね。私のことです。

例外の排除

これは Go 言語の特徴的なところなんだけど、
ちょっと難しいから、次回以降に詳しく調べたいと思ってる。

簡単にいうと、
「俺の辞書に『例外』という文字はない(キリッ」
ってことだと、今は解釈してる。やだ、かっこいい。

  • 発生した異常を戻り値として呼び出し側に返す方針を採用
    • Go では多値を返せることを利用
  • パニックとリカバリという異常を処理する仕組みを備えている
    • ゼロ除算や配列の範囲外への添字へのアクセス

特徴的な機能

Go 言語をシンプルに保つ一方で、今っぽいモダンな機能は積極的にサポートしています。
いいとこ取りな予感やね。

  • クロスコンパイルのサポート
  • 並行処理のサポート

(具体例)

  • コンパイル時にOSとCPUアーキテクチャを指定し、その環境に合わせた実行ファイルを生成できる。
  • ゴルーチンという軽量スレッドを用いて処理を並行に実施
  • ゴルーチンの間ではチャネルという機能でデータをやり取りする仕組みが備わる

充実した開発環境

Go 言語を始めたいと思っているそこのあなた!
必見です。

Go 言語は、開発を助けるさまざまなパッケージ、ツール、
各エディタやツールのためのプラグインなどが公開されているため、
すぐに開発を始めることができます。

  • 標準パッケージ
    • 外部パッケージに頼らずともかなりの開発をカバーできる
    • 標準パッケージの一覧は公式ドキュメントで確認できる
  • ツールのサポート
    • 開発を支援するコマンドが同梱されている
  • 各エディタのサポート
    • 有志よる主要なエディタやツールへのプラグインが公開されている

フォーマット

Go 言語では、標準のコーディング規約が定められています。
プロジェクトごとにコーディング規約を用意したり、
開発者同士の思考を巡って無駄な言い争いを起こることを防いでいます。

  • インデントはハードタブ(タブ文字)
  • 半角スペースを入れるべき場所/入れるべきでない場所が規約として定められている
  • コーディング規約はわざわざ覚える必要はない
    • go fmt コマンドを用いることでコードを自動整形できる

ドキュメント

Go 言語は、標準パッケージやサードパーティパッケージのドキュメントを確認できる
godocコマンドが用意されています。

ただし、godocコマンドを使用するには、別途インストールが必要です。
godoc を使えるようにするにはこちらを参照ください。

おわりに

引き続き Go 言語の学習をお楽しみください!

Go入門リンク

以上、おわり。

52
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?