Go言語(ゴー言語)とは、Googleによって開発されたオープンソースのプログラミング言語です。シンプルで効率的なコーディングを行えるように設計されています。

オープンソースの言語/Go言語とは

Go言語(ゴー言語)とは、Googleによって開発されたオープンソースのプログラミング言語です。シンプルで効率的なコーディングを行えるように設計されています。

目次

「Go言語」基本情報
■概要
■基本説明
■動作環境
■経緯
・Go言語の略歴
・影響を受けたプログラミング言語
・開発コンセプト

主な特徴
■人気プログラミング言語
■採用実績
・ボトルネック処理をGoで置き換え
■言語難易度は低め

言語的特徴
■シンプル言語
■コンパイル言語
・概要
・エラー検出
・実行形式バイナリファイルを作成
・デプロイが容易
・クロスコンパイル開発
■型階層がないオブジェクト指向言語
・型
・オブジェクト
・メソッド
■パッケージ管理システム
・パッケージインポート機能
■高速処理
・高速コンパイル
・実行時パフォーマンス
■安全性
・型安全性
・ガーベージコレクション
・依存関係分析が容易
■平行処理スレッドモデル「goroutine」
■例外処理
・「Try-Catch-Finally」は未採用
・代替機能「panic-recover」例外処理
■非搭載機能

機能的特徴
■自動コードフォーマット
■IDE(エディタ)用プラグイン
・概要
・ローカルIDE(エディタ)用
・クラウドIDE用
・参照ページ
■ロジック/パフォーマンス問題診断ツール
・概要
・プロファイリングツール
・トレースツール
・デバッグツール
・ランタイム(イベント)統計ツール

補足情報
■同様製品
■オフィシャルサイト
・オフィシャルサイト
・ライセンス情報
・ダウンロード

「Go言語」基本情報

■概要

Go言語(ゴー言語)とは、Googleによって開発されたオープンソースのプログラミング言語です。シンプルで効率的なコーディングを行えるように設計されています。

■基本説明

Go言語は、プログラマーの生産性を向上させるオープンソースのプログラミング言語です。

Go言語はシンプルかつ効率的な言語です。特に、簡単に並列処理を簡単に記述できる特徴があり、ネットワーク化されたマシンを最大限に活用するプログラムを作成できます。

■動作環境

公式バイナリディストリビューションとして「Microsoft Windows」「Apple macOS」「Linux」向けに提供されています。

オペレーティングシステムとアーキテクチャの組み合わせでバイナリディストリビューションが利用できない場合は、「ソースからインストール」などを行い利用できる場合もあります。

→The Go Programming Language →Getting Started

■経緯

Go言語の略歴

・2006年頃、開発スタート---Googleの内部プロジェクトとして、Robert Griesemer氏、Rob Pike氏、Ken Thompson氏らによるもの
・2009年、オープンソースプロジェクトとしてリリース
・2012年、バージョン1がリリース

影響を受けたプログラミング言語

Go言語は以下の言語から影響を受けていますが、全面的に新しい言語として開発されています。
・C言語
・Pascal
・Modula
・Oberonファミリー
・Newsqueak
・Limbo
・Python など

開発コンセプト

Go言語の開発コンセプトは、「プログラマーがどのようにプログラミングするか?」「効果的/効率的なプログラミング」などをベースとして、「プログラミングは楽しくあるべき」という発想に基づいています。

主な特徴

■人気プログラミング言語

Go言語は、バージョン1のリリースが2012年で、比較的新しい言語ですが、効率性や記述性などにより、人気プログラミング言語になっています。

TIOBE Softwareが公開している人気プログラミング言語の指標でも、2017年に15位にランクインするなどの人気を得ています。

主な人気の理由
・現実路線
・非常にバランスがとれている
・一定程度以上の開発プロジェクトで利用する言語の選択肢に
・将来的に重要な技術要素の1つとして期待されている など

■採用実績

Go言語はコンテナ型仮想化環境「Docker」プロジェクトに採用されるなどの実績があります。

DevOpsに向いていることもあり、近年、Goを採用する企業も増えてきています。

ボトルネック処理をGoで置き換え

「スクリプト言語(PHP/Ruby/JavaScriptなど)で構築されているシステムにおいて、CPU負荷が高くボトルネックになっている部分について、高速処理を行えるGo言語に置き換える」という導入方法も増えています。

■言語難易度は低め

Go言語は、学習負荷が少なく、比較的容易に習得できます。
・小さい言語仕様
・シンプルでバランスが取れている
・わかりやすい文法
・C/Javaなどのプログラミング言語と構文が似ている
・コンパイル実行によりエラー部分が洗い出されるため、トライ&エラー学習に向いている

言語的特徴

■シンプル言語

Go言語は、合理性/実用性/生産性について徹底的にフォーカスしている言語で、シンプルに開発できるように設計されています。

Go言語の開発環境としては、Go言語本体のみで「ビルド」「テスト」「ドキュメント化」などのさまざまな要素をサポートしています。コマンドラインツールだけを利用して軽快に開発することもできます。エディタやIDEとの連携も行えます。

シンプルに開発でき、なおかつ、「C言語の処理速度」と「Pythonの開発生産性」の両立が意図されています。

■コンパイル言語

概要

Go言語は、C言語やJava言語のように動作するコンパイル言語です。

エラー検出

コンパイル時にすべてのエラー部分が洗い出されます。

実際に実行してみないとエラーがあるかどうか分からないスクリプト言語に比べて、確実性が増すなどのメリットがあります。

実行形式バイナリファイルを作成

プログラムソースをコンパイルすると、ネイティブマシンコードにコンパイルされます。

その後、ビルドを実行すると、1つの実行形式バイナリファイルが作成されます。

デプロイが容易

実行環境として「JVM」や「インタープリタ」などを必要とせず、実行形式バイナリファイル単体で動作します。

そのため、実行形式バイナリファイルを1つ配置するだけで、デプロイを完了できます。

クロスコンパイル開発

クロスコンパイル開発を簡単に行なえます。

Macの開発環境から、Linux/Windows用実行形式バイナリファイルを作成できます。

■型階層がないオブジェクト指向言語

Go言語には「型」と「メソッド」があり、オブジェクト指向プログラミングが可能です。

Go言語は、強い静的型付け言語ですが、「型」には階層がないため、代替として「インターフェース」という概念を利用します。

オブジェクト

Go言語におけるオブジェクトは、値型によって実装されており、値型を定義することでオブジェクトの振る舞いを定義できます。

また、型階層がなく、型間の関係を定義するための時間がかからないため、Go言語のオブジェクトはC++やJavaなどの言語よりも軽量になります。

メソッド

メソッドは、任意の種類のデータに対して定義できます。「プレーンなボックス化されていない整数」などの組み込み型でも定義できます。

■パッケージ管理システム

Go言語は、充実したパッケージが用意されています。

→The Go Programming Language →Packages

パッケージインポート機能

Go言語にはパッケージインポート機能がビルトインされており、外部のGoパッケージをWeb経由でダウンロードして利用できます。

例えば、「import github.com/user/project」と記述するだけで、対象のパッケージを即座に利用できます。

■高速処理

Go言語は、高速処理も特徴です。

高速コンパイル

C++と比較してコンパイルが速く、1台のコンピュータで大規模なGoプログラムを数秒でコンパイルできます。

実行時パフォーマンス

Python/Rubyなどと比較して、高い実行時パフォーマンスを出せます。

処理速度が必要なプログラムを最低限の手間で作るような局面にマッチしています。

■安全性

Go言語は、各種安全性機能を提供します。

型安全性

妥当で現実的なレベルの型安全性を提供します。

ガーベージコレクション

完全なガベージコレクトを行い、メモリ安全性をサポートします。

依存関係分析が容易

Cスタイルのインクルードファイルやライブラリのオーバーヘッドを回避するソフトウェア構築モデルを提供します。

■平行処理スレッドモデル「goroutine」

Go言語は「同期並行処理を容易に実現できる」という大きな特徴があります。

言語標準として、平行処理スレッドモデル「goroutine」の使用が推奨されており、非常に簡潔な記述で同期並行処理を実行できます。

■例外処理

「Try-Catch-Finally」は未採用

Go言語は「Try-Catch-Finally」例外処理を採用していません。

コントロール構造に例外を組み合わせることによりコードが複雑になることを回避するためであり、一般的な例外については、あくまで戻り値を使用する設計思想です。

代替機能「panic-recover」例外処理

「Try-Catch-Finally」例外処理の代替機能として、明示的に例外を発生させる「panic」と、回復処理用の「recover」を用いた例外処理機能を提供しています。

■非搭載機能

Go言語は、プログラミング言語自体をシンプルに保つために、他の言語では使用できる機能をあえて搭載していません。

言語デザインとして正しく使うのが難しく、乱用するとプログラムを無意味に複雑にしてしまう機能が排除されています。

搭載していない主な機能
・型の継承
・ジェネリックプログラミング
・アサーション
・オーバーロード
・イベントモデルによる並行処理
・「Try-Catch-Finally」例外処理 など

機能的特徴

■自動コードフォーマット

Go言語には、コードを自動で整頓する自動フォーマット機能が用意されています。

コーディング規約を設定することなくコードの個人差を吸収できるため、大規模開発プロジェクトなどで活用できます。

■IDE(エディタ)用プラグイン

概要

Go言語用のエディタ/IDE向けプラグインが提供されています。

ローカルIDE(エディタ)用

・Atom
・Eclipse IDE
・Emacs
・IntelliJ IDEA
・Visual Studio
・Visual Studio Code
・vim など

クラウドIDE用

・Cloud9
・CodeEnv
・Wide など

参照ページ

→GitHub →golang/go →IDEsAndTextEditorPlugins

■ロジック/パフォーマンス問題診断ツール

概要

Go言語エコシステムには、Goプログラムのロジックとパフォーマンスの問題を診断するための多数のAPIとツールが用意されています。

プロファイリングツール

プロファイリングツールは、Go言語プログラムの「メモリ使用量」や「頻繁に呼び出されるコードセクション」などを分析します。

トレースツール

トレースツールは、呼び出しまたはユーザー要求について、複数のGoプロセスにまたがって、アプリケーションの待ち時間を計測し分析します。

デバッグツール

デバッグツールを使用すると、Goプログラムを一時停止し、「プログラム実行フロー」と「現在の状態」について確認できます。

ランタイム(イベント)統計ツール

ランタイム(イベント)統計ツールは、「ランタイム統計情報」と「イベントの収集/分析」のためのツールです。

各種メトリックにより「スループット」「使用率」「パフォーマンス」などの情報を確認できます。

補足情報

■同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「C++」「Java」「C#」など。

■オフィシャルサイト

オフィシャルサイト

→The Go Programming Language

ライセンス情報

Go言語のライセンスは「BSDライセンス」です。

詳細について、こちらを参照ください。
→The Go Programming Language →Text file LICENSE

ダウンロード

→The Go Programming Language →Downloads

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

Go言語最新TOPICS

【OSS】プログラミング言語「Go言語」解説---高速で覚えやすい、型推論、FizzBuzz問題を解いてみる(2018年03月23日 11:03)

Googleによって開発されたプログラミング言語「Go言語」について解説。 【Go言語とは】 シンプルで効率的なコーディングを行えるように設計されたプログラミング言語 https://www.ossnews.jp/oss_info/Go 【解説テーマ】 ・高速で覚えやすいGo言語 ・Go言語をインストールしてみよう ・WindowsにGoをインストール ・macOSにGoを...

Go言語最新CLOSEUPコラム

  • 勉強会
  • OSSNEWSに広告を掲載しませんか?

facebook

twitter