以前の投稿で、Go言語の開発環境を構築できたので、ここからはGo入門として基礎的な文法を見ていきたいと思います。
Goの公式サイトに、A Tour of Go というチュートリアルがあります。そこでは環境設定の必要の無いブラウザ上でコードの動作を確認できるplaygroundを使っていますが、ここではVScodeでコードの確認を行っていきます。A Tour of Go の項目やコードを参考にしながら、Go言語の入門をやってみようと思います。
また、単にGo言語のコードを書いていくのではなく、同じ処理のコードをPythonでも書けるところは書いてみて、違いなんかも見ることができればと思います。
GoでHello Worldを実行する
では、さっそくGoをやっていきましょう。まずは定番のHello Worldの表示からやっていきましょう。開発環境の構築のところでもやりましたが、再度確認します。
では、さっそくコードを書いてみましょう。
次のコードになります。
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
ファイルに保存してターミナルで実行したり、GoのPlaygroundで実行すれば、次のように表示されます。
Hello World!
簡単なコードですが、次のように3つの部分に別れています。
package [所属パッケージ名]
import [利用パッケージ名]
func [関数名]() {
[処理コード]
}
簡単にみていきましょう。
パッケージとインポート
上のHello Worldを表示するコードは、package、import、funcの3つのキーワードが使われている部分にわかれています。
packageですが、これはこのコードが属しているパッケージの宣言を意味しています。ここではmainというパッケージになり、Go言語ではコードをパッケージ入れて扱うことになります。Goの標準ライブラリでは数学を扱うmathなどのパッケージがありますが、そういう役割が目的の処理とそれぞれ対応しています。(ライブラリとパッケージの言い方の違いはそれほど意識しなくてもいいと思います)
importは、このコードが利用するパッケージを指定します。ここではfmtパッケージをインポートしています。インポートするパッケージはダブルクォーテーションで囲みます。fmtはformatの略で、画面への入出力を処理する関数をこれで利用することができます。
funcで関数を宣言して、このfmtパッケージをドット(.)接続によってPrintln()を利用して「Hello World!」を出力しています。ここでの関数はmain()を宣言しています。処理の本体は波括弧{}で囲んで関数の処理のブロックを作ります。Println()はテキストを表示する関数です。
mainはGoでは特別な識別子で、Go言語を実行する時は、mainパッケージのmain()関数から実行されます。このmainが無いとGoは実行できません。
では試しに、import文で、他のパッケージを追加してみましょう。ここでは、timeパッケージを追加して、時刻を表示してみることにします。
次のようなコードを書くことができます。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello World!")
fmt.Println("This time is ", time.Now())
}
importするパッケージはそれぞれimprtに続けて書くこともできますが、丸括弧()で囲んで、コードのように縦に並べて書くようになっています。
time.Now()で処理時点の時刻を取得して、Println()で表示しています。
ここではtimeをそのまま使っていますが、パッケージ名はインポートパスの最後の要素と同じ名前になります。 例えば、インポートパスが”math/rand” というようなインポートもできるのですが、この場合のパッケージ名は”rand”になるので、このrandを使って処理をすることになります。
実行結果は、次のような感じになります。
Hello World!
This time is 2020-05-20 10:54:48.570946 +0900 JST m=+0.000141658
表示時刻は処理した時点によるので同じものにはならないのはわかりますよね。
ちなみに、Visual Studio Codeなどでコードを書いているならば、かなりコードの補完機能が入力を助けてくれると思います。
Pythonコードで書いてみると・・・
では、Go言語と比較のためにこのコードをPythonで書いてみます。
下側のコードをPythonで書いてみると、次のように書けると思います。
import datetime
def main():
print("Hello World!")
print("This time is ", datetime.datetime.now())
if __name__ == "__main__":
main()
現在時刻を表示するためにdatetimeをインポートとしてしています。このインポートとprint()関数のみでもファイルは実行していますが、main()関数を定義して、それを実行する形で書いてみました。
実行すると、次のような表示になると思います。
Hello World!
This time is 2020-05-20 11:16:25.300170
このあたりだと、まだどちらのコードも見やすいですね。
最後に
Go言語の入門を始めていきます。
まずは定番のHello Worldを出力することから始めました。
packageでコードが所属しているパッケージを指定し、importで処理に必要なライブラリ(パッケージ)をインポートして利用します。
関数はfuncで宣言し、処理のコードは波括弧{}でブロックを作ります。
Go言語の実行は、mainパッケージのmain()関数が無いと実行できません。