支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • Go言語を知るための手引き

はじめに

システム開発に利用されているプログラム言語は非常に多くの種類があります。古くはアセンブリやcobol、C言語、90年代から主流となったPHPやJava、Python、Ruby、そして新世代の言語として2000年以降にリリースされたRustやKotlin、今回紹介するGo等があります。プログラミング言語は、これまでできなかったこと、不便と感じたことを元に開発者がそれらを改良して作り上げていくため、新しい言語の方がより便利になっていることが多いです。今回は新世代の言語の一つである「Go」について紹介していきます。これからGoを学習しようとしていた方、興味を持っている方はぜひご覧ください。

Go言語の概要

GoはGoogleによって2012年に開発されたプログラミング言語です。Goだけだと検索しづらい、英文だと「go(行く)」と混同しやすい等の状況があるため、英語ではGolang、日本語ではGo言語と表記されることも多いです。オープンソースとなっているため誰でもカスタマイズ可能で、ベースはC言語と言われています。2022年において日本国内ではそこまでメジャーな言語ではないですが、Goを習得しているプログラマーが少ないことや、海外ではすでに人気となっている言語であることから注目度も高まってきています。Go言語の特徴を端的に表すと、メジャー言語のいいとこ取りをした言語と言えます。それでは具体的な特徴を次に見ていきましょう。

Go言語の特徴

Go言語の具体的な特徴はシンプルな構文で開発できる、処理が高速であるということが挙げられます。Goは比較的新しい言語ということもあり、それまで使われていた言語の無駄な要素を省いて不便な部分を改良し、コードの量が少なく済む構造になっています。例えば通常の言語であれば同じ挙動を実現するためのプログラミング方法が複数存在するところを、Goでは一つの方法に絞っている等です。そのため熟練度が異なるプログラマーがコーディングしたとしてもプログラムの差異が出づらく、可読性のあるコーディングが行えるというメリットがあります。なおRubyやPythonもシンプルな言語として有名ですが、GoはどちらかというとJava等のオブジェクト指向の言語に近い構造をしています。

シンプルさを実現している理由

Goの特徴であるシンプルさを実現するために、その他言語ではできることがGoではできないというものがいくつかあります。「継承」ができない、3項演算子がない、genericsがない、例外処理がないの4つです。「継承」は各プログラムで共通する機能をあらかじめ定義しておいて、何度も同じことを記述しなくて良いように、その共通プログラムを汎用的に利用する方法です。しかしGoではインターフェース(interface)が使えるため、似たような利用方法は可能となっています。

3項演算子は、変数を3つ以上含めて1行にまとめて処理を記述できる方法ですが、これは複雑なコーディングの原因の一つとなりがちです。Goでは複雑化を避けるために3項演算子が省かれています。

genericsは、特定の型に依存しないプログラムが利用できる手法です。型にはstring、int、bool等の種類があり、それらを指定することでコンピュータ内にどれだけの領域を確保しておけばよいかということをあらかじめ指定する役割があります。そのため例えばboolが指定されたところにintで処理すべき値が入ってしまうとコンピュータが正常に処理できなくなることがあります。Goではgenericsが利用できないため、たとえ型以外の部分が全て同じコーディング内容であっても、もう一つ型のみ異なるコーディングをしなければならないという状況が発生します。そのため一見ただのデメリットに思えますが、これは様々な型を混在させられることで起こるリスクを回避するという安全性を考慮した結果です。しかしながら近年ではgenericsを導入することも検討されています。

例外処理は、意図せぬ処理が発生した場合の対処内容を記述する部分のことです。一般的な言語では例外処理が記述をすることでシステム全体の停止を防いだり、何がエラーの原因となっているかが把握しやすくなったりしますが、Go言語では例外処理もシンプルさの観点から省かれています。しかし例外処理がないことに対しての対処方法として、プログラム内の戻り値を使ってエラー内容を返すことが推奨されています。以上がGoにはない機能となりますが、それぞれにはシンプルさと安全性が考慮されての理由があることがわかっていただけたことでしょう。

高速処理を実現している理由

プログラム言語は大きくコンパイラ型言語とインタプリタ言語の2種類に分けられます。コンパイラ型はコーディングした内容をあらかじめ機械語に翻訳(コンパイル)して、プログラム実行時は実行のみを行うものです。対するインタプリタ型は、実行時にコンパイルしながら実行を行う言語となります。Goはコンパイラ言語であるため、プログラム実行時は実行だけに専念でき、結果として処理が高速になります。さらにJavaのような一般的なコンパイラ言語は一旦中間言語に変換したうえで機械語に変換するという2段階の処理が必要となりますが、Goの場合は直接機械語に翻訳できるのでさらに高速になるという状況です。またGoは複数のCPUを利用して並列処理を効率的に行う仕様が備わっていることも高速な言語である理由となっています。

Go言語でできることと使用事例

GoはWindows、Mac、Linuxいずれの環境でも動作するため、多くのシステムで利用されています。基本的にWebサイトやアプリケーションサービスといったWeb系サービス、スマートフォンのアプリ開発で使われることが多いですが、APIサーバーやIoT、ドローンに利用されることもあります。

Web系サービスとしては開発元であるGoogleでの利用はもちろん、メルカリやGunosy、DropBox、Youtubeの一部でもGoが採用されています。なお通常Webサービスを構築するにはサービスを動かすためのエンジンのようなものが必要となりますが、Goの場合はそれを必要としないという特徴があります。またWebサービスを構築するためのnet/httpというパッケージが用意されています

iOSやAndroidにも対応しているGoはスマートフォンアプリの開発も可能で、専用の「Go mobile」「Go Cloud」といったパッケージやフレームワークも用意されています。Webとアプリで、それぞれのコーディングを行わなくても同じコードで動作するところが特徴です。

APIはその他のサービスと連携して機能の幅を広げるためのインターフェースのことを指しますが、Goは様々なOS環境で動作し、サーバー移設が発生した場合に追加開発が必要とならないという特徴のほか、並列処理が得意、記述がシンプルでプログラマーに引き継ぎやすいという理由もあって、APIサーバーに向いているとされています。

Goではロボティクス・IoTフレームワークの「Gobot」というものが利用できるようになっており、これを使用して遠隔操作やセンサーの感知、情報伝達を必要とするドローンの開発が可能です。ただし家電のような組み込み系のシステムで使われるという例は今のところ見られません。

以上紹介したそれぞれの分野には、各々得意とするプログラミング言語がありますが、Goを利用することでITシステムの幅広い分野の開発を網羅できるということがわかっていただけたことでしょう。

Go言語を習得するには?

Goは歴史の浅い言語ということもあり、JavaやPHPのように学習方法が充実しているとは言い難い状況です。そのためオンライン上のプログラミング学習サイトでも扱っているところが少ないですが、有料のものではUdemy、ドットインストール(一部無料)等で取り扱いがありました。

それでもGoはオフィシャルサイト内のチュートリアル「A Tour of Go」の内容が充実しており、日本語でも公開されています。無料でGo言語を体系的に学びたいという方にはおすすめです。メジャーな言語であれば周りにも質問できるプログラマーがいるという環境もありますが、Go言語はその可能性が低いため、インターネット上の情報から学んでいくことが中心になることでしょう。

なおもし書籍を購入して学習する場合は、どの言語にも共通して言えることではありますが、できるだけ出版年数の新しいものを選ぶことをおすすめします。書籍はどうしても出版までに時間のかかる媒体であるため、バージョンアップが頻繁に発生しやすいプログラミング言語に関しては発売された時点ですでに情報が古くなっている可能性があります。そのギャップを極力埋めるために新しいものを購入する必要があります。

まとめ

今回Go言語の特徴に関してはシンプルであり、高速処理が可能という2点に絞って紹介しましたが、他にも安全性に優れている、ライブラリが充実しているという特徴も持ち合わせています。なお近年Goは、高速処理、並行処理に優れていることから5G環境と合わせて、大容量のデータ処理が必要となるシステムで活用できる言語として注目されています。シンプルで学びやすい言語でありながら現時点でプログラマーの少ないGoを習得して、ぜひ新世代の言語が扱えるプログラマーとしての活躍を目指してみてはいかがでしょうか。