golangは実行ファイルをビルド出来るので素早くアプリを実行出来るのですが、個人的な道楽でgolangでデータ指向プログラミングを行ってます
そのノウハウを幾つか語りたいと思います
■ 全ての変数はグローバル変数である
それが、データ指向プログラミングの基本的な思想です
golangでは、一つのパッケージ内のスコープでグローバル変数が使えます。そこで、一つのパッケージのソースファイルを分割してプログラミングを行って実装しやすくしてます
まず、全ての変数を種類によって分類し、それぞれのソースファイルへ置き、DAOパターンでメソッドを実装して行きます
単純に言うと「似非オブジェクト指向」です
グローバル変数をDAOパターンのメソッドのみで処理する事によりグローバル変数のデータを出来るかぎり保護してます
メイン処理のソースファイルの変数は、もちろんメイン処理のソースファイルへ置くのですが
どのオブジェクトへも分類できない、あるいは複数のオブジェクトから見る、扱う変数は、分類できない変数を置いておくソースファイルへ置いておきます
パッケージが同じなら、全てのグローバル変数は、どのソースファイルからでも見えますので
■ 前処理、後処理
全てのライブラリにて、前処理、後処理が可能かどうか確かめてます。似非オブジェクト指向なので
■ そのメソッドでしか使わない変数はローカル変数で扱う
なぜなら、単純、グローバル変数を増やしたくない
けど、永続的なデータはメソッドの前にグローバル変数で置いておいて、そのメソッドのみで使うと言うルールでメソッドを実装してます
■ スライス
メモリ依存なスライス(やハードウェア依存の変数など)は、パッケージのinitメソッドなどの前処理メソッドでまとめて定義して、パッケージを閉じる時の後処理メソッドで破棄します。確か
var []hoge int32
とかで、その変数を使うソースファイルへ置いておいて、前処理メソッドでmakeでメモリを確保し、後処理メソッドで
hoge = nil
してスライスを削除してます。その後、runtimeパッケージのガベージコレクタを実行するのも無くはないです
ゲームを作っているので、次のモードが実行する直前のタイミングでガベージコレクタを実行してますが
■ 画面表示
の時は、グローバル変数を変更せずに読み込むのみなので、それぞれのソースファイルから直接データを読み込んでます
データを変更してないので、グローバル変数でもデータを守れるので
基本的には、それらで、golangにてデータ指向プログラミング行ってますよ
0コメント