Go

Go言語について

こんにちは、イサムです!

本記事では、Go言語がどういった言語なのかをまとめていきます。

対象読者
  • Go言語の特徴について知りたい!
  • Go言語でできることが知りたい!
この記事でやること
  • Go言語についてのまとめ

Go言語とは

Go言語は、Googleが開発したプログラミング言語で、2009年にOSSとして公開され、2012年にリリースされました。

正式名称は「Go」ですが、「Golang」や「Go言語」と呼ばれることが多いです。

Go言語はC言語を参考に設計されているので、C言語と同様に処理が高速で、C言語以上にシンプルに記述することができます。
Go言語は、コンパイラ言語です。 コンパイラ言語とは、機械語に一括して変換してから実行するプログラミング言語のことで、処理が高速という特徴があります。 そのため、アプリケーションを動かすために必要なwebサーバーの構築や、大規模データの解析ツール開発などに利用すると良いとされています。

Go言語の構文はシンプルなので、学習難易度が低く、誰が書いても似たようなコードになるので、コードの可読性が上がります。そのため、開発効率を上げることができます。

Go言語の特徴

実行速度が速い

記述したソースコードを機械語に翻訳してから一気に実行するコンパイル言語なので、PHPなどコードを実行する際に1行ずつ機械語に翻訳するインタプリタ言語に比べて実行速度が速いです。
記述様式が限定されているため内部での処理も簡易化されている他、並行処理が得意なことも、軽量、高速処理に寄与しています。

構文がシンプル

扱いの難しい機能を排除したシンプルな言語構造になっており、誰が書いたコードでも読み書きしやすくなっています。また、シンプルな分、厳格な記述ルールが存在しているため、書き方で迷うことがありません。

例えば、下記のコードを書くだけで、文字列を出力できます。

package main

func main() {
   println("Hello World!")
}

標準パッケージが豊富

標準ライブラリの一部(Go言語の標準ライブラリ一覧)

fmt書式に関する処理など
os, path/filepathファイル操作など
net/httpHTTPサーバーなど
encodingJSON, XML, CSVなど
html/templateHTMLテンプレート

周辺ツールが豊富

周辺ツールの一部(Go言語の標準ライブラリ一覧)

go buildソースコードのコンパイル
go runソースコードのコンパイルと実行
go testテストコードの実行
go envGoの環境変数を確認
go version現在のGoのバージョンを確認
go getパッケージのダウンロード
go doc, godocドキュメントの確認

クロスコンパイルが可能

開発環境とは違うOS向けのバイナリを作成することができます。
シングルバイナリが作成され、他の環境でコピーしても実行できるようになります。
環境変数のGOOSとGOAARCHを使用します。

# Windows(32ビット)向けにコンパイル
$ GOOS=windows GOARCH=386 go build

# Linux(64ビット)向けにコンパイル
$ GOOS=linux GOARCH=amd64 go build

goroutineで簡単に並列処理が可能

goroutineとは軽量なスレッドのようなもので、スレッドとは、複数の処理を同時にする機能のことです。
並行処理とは、複数の動作を同時に処理することで、下記のように記述することで、関数をgoroutineで呼び出すことができ、並列処理ができるようになります。

go f()


goroutine間でデータのやり取りをする場合、チャネルを使用することで実現できます。

Go言語でできること

APIサーバーの構築

API(Application Programing Interface)とは、あるソフトフェアの機能や管理しているデータなどを、外部のプログラムから呼び出して利用するための手順やデータ形式などを決めた規約のことで、APIサーバーとは、そのAPIを提供するサーバーのことです。
リクエストに対してあるデータを返すなど、主にWebサービスで使用されることが多いです。
Go言語では、Net/httpまたはechoパッケージを使用することで簡単にAPIサーバーを構築することができます。

マイクロサービス

マイクロサービスとは、複雑なシステムを機能単位など小さい単位に分割し、それらを組み合わせることで、システムを構築するアーキテクチャのことで、Go言語ではこれを実現することができます。

モバイルアプリの開発

Webアプリケーション開発だけでなく、iOSやAndroidなどのスマートフォン向けのアプリケーション開発にも対応しています。
モバイルアプリの制作ツールがパッケージ化された「Go mobile」や「Go Cloud」を利用することで、Web・アプリ用など書き方を変えることなくアプリ開発ができます。

CLIツール開発

CLI(Command Line Interface)とは、コマンドを実行する画面で動くツールのことです。

Go言語はクロスコンパイル機能により環境を選ぶことなく、OSやバージョン、プラットフォームによる依存関係を気にせずに開発できるため、CLIで動作するアプリ開発もできます。

Go言語を使用する上での注意点

オブジェクト指向の概念がない

C#などのオブジェクト指向の概念はなく、これまで、オブジェクト指向言語を用いてシステム開発をしてきた方にとっては、Go言語を使いにくく感じることがあります。
(自分も最初は少しやりづらかったです。)

三項演算子がない

三項演算子とは、条件が真の場合、偽の場合の処理を1行で記述できる演算子のことで、大変便利なのですが、Go言語では使用することができません。

Genericsがない

Genericsとは、インターフェース、クラス、メソッドなどの「型」をパラメータとして定義する機能のことで、TypeScriptなどの他の言語では使用できますが、Go言語では使用することができません。

例外処理がない

他の言語では、例外が発生した時に例外処理を記載します。
しかし、Go言語では、「例外が発生した場合、呼び出し元が処理をする」という考え方に基づいているため、例外処理の機能が用意されていません。

Go言語のプログラム構成要素

パッケージ

  • 型や関数、変数、定数などの意味のある単位でまとめたものです。
  • Goのプログラムは、パッケージの組み合わせでできおり、mainパッケージのmain関数から実行されます。
  • 他のパッケージの機能を使用したい場合、そのパッケージをimportし、様々な機能が使用できるようになります。
package main

import (
  "fmt"
)

func main() {
  const name string = "Osamu"
  var age int = 20
  fmt.Println(name, age)
}


パッケージのインポートのイメージ

  • データの種類を表したもので、文字列、数値などがあります。
package main

import (
  "fmt"
)

func main() {
  const name string = "Osamu"
  var age int = 20
  fmt.Println(name, age)
}

関数

  • 処理を意味のある単位でまとめたものです。
  • パッケージに属さない組み込み関数などもあります(printlnなど)。
package main

import (
  "fmt"
)

func main() {
  const name string = "Osamu"
  var age int = 20
  fmt.Println(name, age)
}

変数

  • 処理で使用するデータを格納するものです。
  • 変数を使ってデータを書き換えることができます。
package main

import (
  "fmt"
)

func main() {
  const name string = "Osamu"
  var age int = 20
  fmt.Println(name, age)
}

定数

  • コンパイル時に値が変わらないデータを格納するものです。
package main

import (
  "fmt"
)

func main() {
  const name string = "Osamu"
  var age int = 20
  fmt.Println(name, age)
}

Goプログラムが実行されるまでの流れ

  1. ソースコードを作成
  2. ソースコードをコンパイルし、バイナリを生成
  3. コンパイルしたバイナリを実行

まとめ

この記事では、Go言語の基礎的なことをまとめました。
少しGo言語をいじってみたいと思ったら、こちらのブラウザ上で実行できる公式チュートリアルでコードを実際に書いてみると雰囲気がつかめるかもしれません。
今後、さらにGo言語のことについて記事にしていきたいと思います。

もし「記事の内容が間違えている!」等ありましたら、Twitterまたはお問い合わせフォームからご連絡いただければと思います。

最後までご覧いただきありがとうございました。

参考サイト

Go言語とは?特徴・将来性・作れるもの・資格など総まとめ

Go言語のプログラミングでできること・作れるものは?言語の特徴とメリット

Go言語公式ドキュメント

Go言語公式チュートリアル