.net column
.NET開発者のためのブログメディア

Go言語とは?シンプルな記述が強みのGo言語の使用方法、特徴について解説

2021年04月05日
SE
Go言語はどのようなプログラミング言語なのですか。
PM
Googleによって開発されたオープンソースのプログラム言語です。シンプルで信頼性が高く、効率的なソフトウェア開発を実現することができるという点が特徴です。

Go言語とは?


Go言語(Golangとも呼称されます)はGoogleによって開発され、2009年11月に発表されたオープンソースのプログラム言語です。Go言語はシンプルかつ信頼性が高く、効率的なソフトウェア開発を実現することができるという点が特徴です。

Go言語は汎用的に利用可能な言語ではありますが、特にWebアプリケーションのサーバーサイドの基盤や、エンジニア向けのツールやシステムを構築するのに最適な選択肢です。

サーバーサイドの言語としては非常にニーズの高まってきている言語で、特にマイクロサービスアーキテクチャに採用されるケースが多いです。

Go言語はマイクロサービスアーキテクチャに採用されやすい

前セクションでGo言語はマイクロサービスアーキテクチャに採用されやすいと述べました。そもそもマイクロサービスとはなんでしょうか。

マイクロサービスとは、1つのアプリケーションを複数のサービスに分割してアプリケーションを構成する手法です。複数のサービスで構築することによって、疎結合かつフェールセーフなアプリケーションを構築できます。

複数のサービスに分割されていることで、サービス単位での開発・デプロイ・テストを行うことができます。

特に日本では、Ruby on Railsで実装されたWebアプリケーションをマイクロサービスする際に、Go言語でリプレイスを行うという事例が近年多いです。

Go言語はコンパイルが必要な言語です

プログラム言語を大別するとコンパイルが必要な言語(コンパイル言語)と、そうでない言語(スクリプト言語)に分けられます。Go言語は前者のコンパイル言語です。 つまり、ソースコードを実行可能なバイナリ形式に変換する必要があります。

コンパイルが必要な言語としてはJavaがメジャーなプログラミング言語ですが、Javaと違ってGo言語はOS毎にコンパイルが必要です。(OS毎にコンパイルが必要な点はC言語と一緒です。)

Go言語は、Mac, Linux, Windowsを問わずに実行させることができますが、それぞれのOS毎にコンパイルを行い実行可能なファイルを用意する必要があるのです。

上記のコマンドはmain.goというファイルをコンパイルするためのコマンドです。これを実行するとmainという実行可能なバイナリファイルが生成されます。(オプションを指定することでコンパイラが動作しているOS以外で動作するバイナリファイルも生成可能です。)

Go言語は静的型付け言語です

Go言語はJavaやC言語、最近流行りのTypeScriptと同様に静的型付け言語です。(RubyやPythonは動的型付け言語です。)

静的型付け言語は宣言された変数や、関数の引数・返り値の型が予め決まっているプログラミング言語になります。

上記は簡単な関数の例です。引数と返り値がint型で指定されています。また、変数sumの宣言時にはsumがint型であると指定されています。

静的型付け言語は、予め型が決まっているため、実行時ではなくコンパイル時に型のチェックが行われます。そのため処理速度が早くなります。また、関数の引数や返り値の型が予め定まっているということで大人数での開発に適している、とも言われています。

Go言語では型推論が有効になっています

型推論とは変数の宣言時に明示的に変数の型をしてしなくても、前後の文脈を踏まえて暗黙的に変数の型が決定される仕組みのことを言います。

前セクションでは、Go言語は静的型付け言語であり、変数の宣言時に型を指定するということをお伝えしましたが、実際の開発では型を指定しての宣言はあまり使いません。なぜかと言うと、Go言語は型推論が有効だからです。

前セクションではvarを使って変数の宣言をしましたが、以下のように:=を使って宣言と代入を同時に行うことができます。

nameはstring型と型推論されます。

また、関数の返り値に対しても型推論は有効です。返り値がint型の関数addNumbersの左辺にsumという関数を用意します。この場合、sumはint型と推論されます。

動的型付け言語のJavaScriptなどでもこの型推論は有効です。静的型付けのJavaに関しては長らく型推論は利用できませんでしたが、2018年に公開されたJava10からは型推論が利用可能になりました。

Go言語は静的型付けであり、型推論も有効な言語なのです。

Go言語はオブジェクト指向ではありません

Go言語には”オブジェクト”と呼ばれる型はなく、インスタンスを生成して、生成したインスタンスにアクセスして…という方法を採用していません。

オブジェクト指向に慣れている方はこの点で悩まれる方が多いです。唯一オブジェクト指向に類似した仕組みとして構造体と呼ばれる仕組みが存在します。

上記はemployeeという構造体を実装した例です。TanakaTaroという構造体を生成し、introduceという関数を実行しています。introduceには引数がないことにお気付きでしょうか。introduceは構造体employeeに付加された関数であり、そのパラメータnameに応じて挙動が変化します。

このように、構造体に対しては関数を付加できるという仕組みが存在しています。

Go言語では並行処理が書きやすい

Go言語は並行処理がシンプルに記載できると評判が良いです。既存のプログラミング言語では並行処理の記述が複雑になりがちですが、Go言語ではそれが解消されています。

関数を呼び出す際に、先頭にgoを付与するだけで良いのです。

これを実行すると アプリ起動→取得リクエスト済み…→取得処理完了!!!の順番で表示されます。goを先頭に付与するだけで非常に簡潔に非同期処理を記載できます。この仕組みをgoroutineと呼びます。

正確に言うとmainもgoroutineの一種です。mainというgoroutineから別のgoroutineを呼ぶことができるのです。

Go言語にはポインタという概念があります

Go言語にはポインタという概念が出てきます。ポインタは簡単に言えば、変数が格納されているアドレスのことです。C言語を触ったことのある方なら馴染みがあるのではないでしょうか。

上記は*を付与するとその変数はポインタ型となり、&によってポインタを取得することができます。上記ではPerson型のポインタを格納するpという関数を宣言し、生成した構造体のアドレスを代入しています。

SE
シンプルで信頼性が高いというのがいいですね。
PM
年々需要が高まっている言語ですので、この機会にぜひGo言語を勉強してみてください。

Go言語を取得してエンジニアとしての価値を高めよう

この記事ではGo言語の特徴について解説しました。Go言語は少し癖のある言語ではありますが、記載の仕方は非常にシンプルです。Webサーバーも数行の記述で実装することができます。

サーバーサイドの言語として年々需要が高まっている言語ですので、この機会にGo言語を勉強してみるのも良いのではないでしょうか。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)