プログラミング言語は、著名なものは実際に仕事上も使ってきたのですが、GO言語(GOLang)は使ったことがなかったので、インストールしてみました。
最近はインストーラが良く考慮してあって、特に指示にしたがうだけでうまくいくようです。
いくつか気づいた点と、実際に数時間ほど、使ってみたので他の言語を知っているけど、GOはやったことがないという方も含めて、ご参考までにまとめました。
GO言語のインストールと実際に使ってみた所感
今回のポイント
- Go言語のインストールはインストーラの指示に従えば終了する
- 開発環境は様々でているがマイクロソフトのVS-CODEで利用可能
- JavaやC/C++に近い感覚で使えるので習得済みであれば最初のハードルは低い
- コンパイラで型チェックはしっかりあるものの、推測ありでインタプリタとの中間
- ループはfor文のみ、標準関数の使い方など慣れは必要
Go言語が優れているという、並列処理までは手をだしていません。こんど時間がとれたら、やってみようかとは思います。
Go言語のインストール
下記のサイトからインストールできます。
golang.org/dl/
自分はWindowsでやってみたので、Windows版をダウンロードしています。
以下は、Windows10での手順になります。
インストーラをダウンロードしてクリックすると、インストーラーの画面が立ち上がります。
指示にしたがって、ボタンを押していけば数分で完了します。(基本デフォルト)
これでインストールは完了しているはずです。
他のサイト情報で調べると、環境変数を設定するなどとありましたが、2020年5月現在、インストーラがすべてやってくれるようなので、特に不要でした。
環境変数として関係してくるのが、PATHとGOPATH、ですが、PATH(Goのモジュールの場所を指定)はインストーラが自動で設定してくれます。
GOPATHは、ライブラリなどをインポートする先のパスですが、標準ライブラリを利用するだけの場合は特に指定の必要はありません。
自分でライブラリを開発したりする場合には指定の必要性がでてきますので、まずは使うだけであれば、指定は不要でした。
必要になったら、設定するということにして、今回はパスしています。
インストール結果の確認
ウィンドウズキーを押して、cmd といれるとコマンドプロンプトが立ち上がりますので、ちゃんとインストールができているか確認するために、>go version と打ち込みました。
無事バージョン表示もされて、インストールができていることが確認できました。
インストール確認
インストールとしてはここまでで完了していますが、実際に動かして確認が必要なので、例のごとく「Hello,World!」のプログラムを作成します。
この段階では、Go言語のGの字も知らないので、サイト検索して、Hello、Worldプログラムを見つけます。
「あった、あった!」
ということで、打ち込んで動作させることにします。
package main import "fmt" func main() { fmt.Printf("Hello world\n") }
PythonやRubyは一行ですみますが、Go言語はそうはいきませんね。
Javaにかなり似ている感覚です。
確認だけならnotepadで作成保存して、コマンドラインコンパイルでもいけますが、他の言語は全部VS-CODEを使っているので、そちらを立ち上げて、入力します(コピペでもいいとは思います)。
コマンドは、go run ソースコード名 でビルド&実行できます。
無事、Hello, world と表示されて動作確認完了です。
さすがにインタープリタ系の言語(PythonやRuby)よりは待ちます。実際には数行なので、実業務での使い勝手はわかりませんが、C/C++やJavaよりはコンパイル実行は早くできる感じでした。
少しだけ使ってみました
思いの外すぐにインストールが終わってしまったので、Hello,World!の次にいつもつくるタイピング練習プログラムの簡易版を作ってみました。
「表示された文字列と同じ文字列を打ち込んで、かかった秒数と、表示文字列と入力文字列との一致率を出力する」
という、非常に簡単なプログラムです。
いつも、はじめての言語をさわってみる時は、Hello,Wolrd!プログラムの次につくってます。
通常は、ファイル読み込みして、ランダムで表示するところまで入れ込みますが、ファイル読み込みが、インタプリタ―の簡易言語系のようには数行とはいかないようで(知らないだけかも)、長くなるし、今回はインストールメインなので、ファイル読み込みのない簡易版を載せます。
実際のソースコードはこうです。
// タイピング練習プログラム(Go言語版) package main import ( "bufio" "fmt" "math" "os" "time" ) func CalcHitRate(prtstr string, inpstr string) int { linp := len(inpstr) ihit := 0 for i, _ := range prtstr { if i >= linp { break } if prtstr[i] == inpstr[i] { ihit = ihit + 1 } } return int((ihit * 100) / len(prtstr)) } func main() { fmt.Println("*** タイピング練習プログラム(Go言語版) ***") prtstr := "hello, world!" var inpstr string scn := bufio.NewScanner(os.Stdin) for { fmt.Println("\n表示された文字を入力してください.") fmt.Println(" " + prtstr) fmt.Print(" > ") inpstr = "" ts := time.Now() if scn.Scan() { inpstr = scn.Text() } te := time.Now() if len(inpstr) == 0 { break } tsub := float64(te.Sub(ts)) / float64(math.Pow(10, 9)) fmt.Printf("正解率:%d パーセント 時間: %6.2f 秒\n", CalcHitRate(prtstr, inpstr), tsub) } }
main関数側で、ループ処理で、文字列を表示しては、入力を促し、リターンで入力完了のタイミングで、正解率を計算しています。
正解率の計算は、別関数にしました。
実行結果は、このような感じです。
PS C:\EXGo> go run touchtype.go *** タイピング練習プログラム(Go言語版) *** 表示された文字を入力してください. hello, world! > helo 正解率:23 パーセント 時間: 2.16 秒 表示された文字を入力してください. hello, world! > hello, world! 正解率:100 パーセント 時間: 4.44 秒 表示された文字を入力してください. hello, world! >
Javaだと最初からクラスを書くことを強要されますが、Go言語はパッケージ宣言はするものの関数でいいので、Javaよりは初心者には最初は楽かもしれないです。
実際JavaやC/C++を知っていれば、結構そのままの知識で書けてしまいます。
とはいえ、標準関数などには違いがあるので、1つ1つ調べないとできないです。
つまずいたのは、2か所だけでしたので、よほどJavaに似ているのかもしれないです。
まずは、ループがfor文しかないということ、無限ループがきっと、while(true)でいけるだろうと、書いたらコンパイラに叱られました。
ループがfor文しかないのは、Go使いとしては常識のようです。
次が標準関数のScanでつまずきました。
最初はScanを使っていたら、リターンで終了しない。リターンで終わらせるには、Scanlnというのを調べてわかったので、そちらに変えたら、今度はスペースを入れたら次の入力が返ってくる(スペース区切りで複数の入力を受け付ける)、と関数の仕様を知らずに他の言語のライブラリからの類推で使っていたら、原因を見つけるのに時間がかかってしまいました。
ちゃんと調べないとだめだということですね。
逆に、Printfなどで使うフォーマットの指定子は、CやJavaとほぼ同じようなので、想定で指定したらちゃんと表示されて困らなかったです。
実際には、これだけでは、Go言語は語れませんし、さっき触りだしたばかりなので言語本来の書きかたはできていないと思いますが、予想以上に簡単につかえるということはわかりました。
ただ、インタプリタ系(例えばPython)の方が、はじめてのプログラミング言語ということであれば、習得するハードルはずっと低いと思います。
今回は、Go言語のインストールから簡単なプログラム作成までやってみました。
最後までお読みいただき、ありがとうございました。