マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】Go言語

【OSS情報アーカイブ】Go言語

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

「Go言語」とは

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

■オフィシャルサイト情報

オフィシャルサイト

→The Go Programming Language

ライセンス情報

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

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

ダウンロード

→The Go Programming Language →Downloads

■同様製品

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

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

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

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言語」の機能的特徴

「Go言語」の機能的特徴

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

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

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

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

概要

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

→GitHub →golang/go →IDEsAndTextEditorPlugins

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

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

クラウドIDE用

・Cloud9
・CodeEnv
・Wide など

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

概要

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

プロファイリングツール

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

トレースツール

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

デバッグツール

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

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

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

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

 

参考元サイト

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

この記事のタグ一覧

おすすめの記事

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

「 2029年問題 」とは、高校でのデジタル教育改革により、新入社員と既存社員間でデジタルスキル格差が拡大する懸念を指します。企業は早急に対応が求められています。この格差は、企業競争力や業務効率にも、影響を及ぼす可能性があります。

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

経済産業省による「 生成AI 利活用ガイドブック 」は、企業やクリエイター向けに、安心して「生成AI」を利用するための、「指針」「実例」「注意点」を明示しています。「業務効率化」や「新しいアイデア創出」の支援を目的としています。

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

「 VMWare 」の仮想化技術は、「ITインフラの効率化」に大きく貢献する技術ですが、Broadcomによる買収後のライセンス変更が大きな問題として注目されています。柔軟で慎重な契約見直しが今後の鍵となります。