マッハGoGoGo
3ヶ月ぶりの更新となる。なかなか続けるのは根気がいる。まあ、やる気が突然切れてしまうのだが。さて、少しでもやる気を出そうと思い、Goを始めてみた。Wikipediaによると、次のように記述されている。
Goはプログラミング言語の1つである。2009年、GoogleでRobert Griesemer、ロブ・パイク、ケン・トンプソンによって設計された。Goは、静的型付け、C言語の伝統に則ったコンパイル言語、メモリ安全性、ガベージコレクション、構造的型付け(英語版)、CSPスタイルの並行性などの特徴を持つ。Goのコンパイラ、ツール、およびソースコードは、すべてフリーかつオープンソースである。
https://ja.wikipedia.org/wiki/Go_(プログラミング言語)より引用
それなりに歴史のあるプログラミング言語である。だが、始めてみると意外にも比較的情報が少ないことに気づく。基本文法であれば問題ないのだが、それ以上のことをやろうとすると、検索しても望む情報が出てこない。書籍にしても、他のプログラミングう言語と較べると少ない。
国内においては比較的認知はあるものの、不人気なのかどうかわからないが、これからやってみようと思うと意外と苦労するかもしれない。こういった点を考えると、最初に始めるプログラミング言語ではなく、第2のプログラミング言語として始めるのがよいかもしれない。
数値計算には不向き?
これは、Pythonで書かれた天文計算のコードをGoで書き直したときに感じたものである。不向きというと誤解を招きそうだが、だめというわけではない。静的型付け言語であるため、変数に型宣言をする必要がある。
var num01 int
var num02 float64
ここまではよい。Goは計算するときに宣言された同じ型同士の演算しか認められていないのである。上記の2つの変数を用いて演算を行うことはできない。これは正しいことではある。だが、実際は異なる型の演算を行うことが多い。そのため、求める結果によっては、どちらかの変数をキャストするという少し手間のかかることをしなければならない。
例をあげてみる。西暦y年m月d日のユリウス日(JD)を求める計算式は次のとおり。
JD = int(365.25 * y) + int(y / 400.0) - int(y / 100.0) + int(30.59 * (m - 2)) + d + 1721088.5
わかると思うが、整数部分と浮動小数点部分の混成式となっている。このままだと、エラーとなって結果を求めることができない。この結果に時刻(少数点含む)を加えるため、ユリウス日(JD)は浮動小数点型でなければならない。
Goで正しく結果を求めるには、次のようにする。長くなるため式は分割して記述する。
JD = float64(int(365.25 * y))
+ float64(int(y / 400))
- float64(int(y / 100))
+ float64(int(30.59 * (m - 2)))
+ d + 1721088.5
intの部分はすべて浮動小数点型にキャストする。これで正しい結果が求められる。少し手間がかかるが、Goの仕様上致し方ないことであろう。
最後に
計算以外にも、いくつか小さな点があるが、とりあえず始めてみたので、Pythonで書かれたコードを書き直していってみようと思う。Pythonのように華やかではないが、じっくり取り組んで学習したいプログラミング言語であるといえる。それにしても、本を購入しようかどうか迷うなぁ。