こんにちは、イサムです!
本記事では、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/http | HTTPサーバーなど |
encoding | JSON, XML, CSVなど |
html/template | HTMLテンプレート |
周辺ツールが豊富
周辺ツールの一部(Go言語の標準ライブラリ一覧)
go build | ソースコードのコンパイル |
go run | ソースコードのコンパイルと実行 |
go test | テストコードの実行 |
go env | Goの環境変数を確認 |
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プログラムが実行されるまでの流れ
- ソースコードを作成
- ソースコードをコンパイルし、バイナリを生成
- コンパイルしたバイナリを実行
まとめ
この記事では、Go言語の基礎的なことをまとめました。
少しGo言語をいじってみたいと思ったら、こちらのブラウザ上で実行できる公式チュートリアルでコードを実際に書いてみると雰囲気がつかめるかもしれません。
今後、さらにGo言語のことについて記事にしていきたいと思います。
もし「記事の内容が間違えている!」等ありましたら、Twitterまたはお問い合わせフォームからご連絡いただければと思います。
最後までご覧いただきありがとうございました。
参考サイト
Go言語のプログラミングでできること・作れるものは?言語の特徴とメリット