Go言語 ~基礎編~ 基本文法

go

学習記録

Go言語は、シンプルさとスピードにフォーカスを充てた静的型付け言語です。

Go言語には以下のこだわりがあります。

・ コンパイルの高速化
・ 簡潔なプログラミング文法
・ ガーベージコレクション(メモリリリース)
・ 並列プログラミングの書きやすさ
・ マルチコアプロセッサーのサポート
・ マルチプラットフォーム(Mac, Windows, Linux)上での動作

javaScript, Python などの動的型付け言語を学んできた人の次の習得言語として、私は、Go言語を推します。

Goのインストール

以下の手順で、Goをインストールしましょう。

  1. ブラウザからGoのサイトにアクセスする
  2. ダウンロードリンクを押下する
  3. OSの種類を選択して、installation packageダウンロードする
  4. installation instructionsにアクセスし、インストール方法を確認する(各自のOS)
  5. 新しくterminalか、コマンドプロンプトを開く
  6. Go言語がインストールされたか確認するために、「go version」を入力し、Goバージョンが表示されるか確認する

Go Playground

Goをインストールする以外に、Goを簡単に試せる方法があります。

その方法とは、「Go Playground」を活用することです。

Go Playground は、Web上で動く簡易のエディタで、簡単なコードならここで試せます。

Goのファイルは、全て「package」句から始まります。

packageは、コードの集合体で、package句で指定した名前で一つの塊になります。

ちなみに「main」となるパッケージ名は特別で、Go言語はこのパッケージに記載された 「func main()」から最初の処理を実行します。

次の「import」句は、他のパッケージのソースコードをインポートする役割を持っています。使いたい機能を読み込んでいるわけですね。

Goのソースファイルが読み込まれる時、このimport句が他のソースファイルを読み込みに行くため、不要なソースはimportしない方がよいとされています。読み込みに時間がかかってしまうからです。

繰り返しになりますが、main関数は特別な関数です。Go言語はシステム起動時、最初にこの関数を読み込みます。

複数のパッケージを読み込む

前述の通り、「import」句を利用して他パッケージから使いたい機能をインポートできます。

複数のパッケージを読み込むときは、以下のようにします。

Go言語のクラス

他の言語と同様、Go言語には様々な組み込みクラスが用意されています。

Stringsクラス

strings は、テキスト文字を扱うクラスです。Go言語では、””(ダブルクォーテーション)でくくって、扱います。

また、改行やタブ、文字のエスケープを表す表記があります。

   
エスケープシーケンス意味
\n文字列を改行する
\tタブを追加する
\”“をエスケープする
\\\をエスケープする

サンプルを載せておきます。

Runesクラス

Stringsクラスが文字列を表すクラスである一方、Runesクラスは、シングル文字を表すクラスです。通常、文字をシングルクォートで囲みます。

上記のプログラムを実行してみましょう。

数値が出力されましたね。

Go言語は、Runesクラスをユニコードとして扱います。A=>65、B=>66, C=>67の値は、それぞれのユニコードに紐づくコードを表しており、Runesが保持しています。それを出力しているわけです。

Booleansクラス

Booleanクラスが保持する値は、trueかfalseしかありません。この値は条件判定によく使われます。

Numbersクラス

Numbersクラスは、数値を扱うクラスです。

実行結果は、「1000」と表示されます。

Types

Go言語の扱う値には、それぞれタイプがあります。stringタイプ、boolタイプ、intタイプなどですね。

Go言語は、期待されるタイプではない値を渡した場合は、エラーを出力します。

タイプを確認したければ、「reflect」パッケージを使うと便利です。

   
Type説明
int数値を保持するタイプ
float64浮動小数点までの数値を保持するタイプ(64は、64bitを指す)
boolboolean値を保持するタイプ
string文字列を保持するタイプ

変数の宣言

変数宣言を学びましょう。変数は値を保持する入れ物であり、いくつかの宣言方法があります。

varキーワード

varキーワードを使った変数宣言を見てみましょう。

ちなみに各タイプには、初期値が存在します。

Short variable declaration

変数宣言のもう一つの方法は、「short variable declaration」と呼ばれる手法で、変数宣言時に「:=」を使用して宣言します。

short variable declarationは、簡潔で便利なのでよく利用されます。

この二つの変数宣言の使い分けについては、また別の機会に紹介します。

命名規則

変数、関数、typeなどに付ける名前には、命名規則があります。

・名前の先頭は文字で始め、その後は数値や文字を続ける
・先頭文字が大文字の場合は、他のパッケージからの参照が可能
・先頭文字が小文字の場合は、他のパッケージからの参照は不可

また、Go言語のコミュニティでは、以下の書き方が推奨されています。

・キャメルケース(topSecret, anotherThingなど)で記載する
・簡潔な名前(index -> i, maximum -> maxなど)

型変換

実行できそうで意外とできないコードがこれです。

Typeが、float64とintの2つの変数を掛け合わせて出力しようと思ったのですが、以下のエラーが出ました。

float64とintだとTypeが違うので、「mismatched types」が発生するようです。

この事象を解決するためには、型変換を行う必要があります。型変換とは、とあるTypeの値を別のTypeの値に変換することを指します。

先ほどの例のwidth(int)をfloat64に変えてみましょう。変換方法は簡単で、変更したい変数名をfloat64()囲むだけです。

ただし、float64をintに変更すると小数点以下を切り捨てるので注意が必要です。

ソースコードのコンパイル

コンピューターがGOのソースコードを実行する時、直接ソースコードを解析して実行するのではなく、ソースコードをコンパイルして作成したバイナリファイルを実行しています。バイナリファイルに変換することで、CPUはプログラムを実行できるようになります。

ソースコード ===> compiler ===> バイナリファイル(コンパイル済のファイル)

サンプルで確かめてみましょう。main.goファイルを作成し、適当な場所に保存してください。

main.goファイルを格納したディレクトリまでterminalで移動し、以下のコマンドを実行してください。

Macの場合なら拡張子なしのmainファイルが生成されます(windowsであれば、main.exeになります)。

このmainを実行してみましょう。

実行できました。

他に実行する方法としては、「go run コマンド」があります。こちらは、コンパイルファイルを生成せずにプログラムを実行してくれます。

Go tools

Goをインストールした時、go コマンドが実行できるようになっています。このコマンドには、様々な種類があります。

   
コマンド説明
go buildソースコードをバイナリファイルへコンパイルする
go runコンパイルと実行を同時に行う(バイナリファイルの保存はしない)
go fmtGoのコーディングスタイルに則って、ファイルを整形する
go versionGoのバージョンを確認する

まとめ

・package は、関連する関数とコードの集合体である
・packageの関数を実行する前には、importする必要がある
・stringは、テキスト文字列を表す
・runeは、シングル文字を表す
・numberには、intとfloat64のタイプが存在し、float64は、浮動小数点数が入る
・boolは、true/falseのboolean値が入る
・変数は、指定したタイプの値を格納する
・変数に値が格納されていない場合は、それぞれのタイプの初期値が入る
・short variable declaration(:=)で、変数宣言を行うことができる
・変数、関数、typeの先頭の名前を大文字にすることで、他パッケージからのアクセスを可能にする
・go fmtコマンドにて、ソースコードのフォーマットができる
・go build コマンドにて、ソースコードをバイナリファイルにコンパイルできる
・go runコマンドにて、カレントディレクトリのソースファイルをバイナリファイルの保存なしで実行できる

参考書籍

次回

次回は、条件判定とループを学びましょう^^

コメントを残す