見出し画像

TWSNMP FC:GO言語のパッケージの分け方を見直す

今朝は5時に自分で起きました。起きて真っ暗な足元を見ると何か動いていました。猫でした。夜中いかなり騒いでいましたが、朝は黙って、かみさんの布団はいるために来たようです。でも、私が起きるのも見つけて一緒に仕事部屋についてきました。
昨日、Jリーグの浦和レッズの試合を見ました。引き分けでしたが、今年は期待できる感じです。

さて、TWSNMP FCの開発でレポート機能を作り始めてARP監視機能も復刻版から移植始めました。ここで前から気になっていたGO言語のパッケージの分け方を整理したくなりました。試しに移植する部分だけと思いましたが、作っているうちに全体を見直すことになり、気がつけば、かなりの大仕事になっていました。
後で後悔したくないので、まずは、パッケージから別のパッケージの変数にアクセスできるかというテストプログラムを作って試してみました。

1つ目のパッケージ

package p1
var P1 = "test1"

2つ目のパッケージ

package p2

import (
	"fmt"
	"test/p1"
)

func P2() {
	fmt.Printf("p2 %s\n", p1.P1)
	p1.P1 = "test3"
}

メインパッケージ

package main

import (
	"fmt"
	"test/p1"
	"test/p2"
)

func main() {
	fmt.Printf("main %s\n", p1.P1)
	p2.P2()
	p1.P1 = "test2"
	fmt.Printf("main %s\n", p1.P1)
	p2.P2()
	fmt.Printf("main %s\n", p1.P1)
}

心配だったのは、メインパッケージでインポートしたp1パッケージ内の変数 P1は、p2からパッケージインポートしたp1のP1と同じか?ということです。
実行結果は、

 % go run main.go
main test1
p2 test1
main test2
p2 test2
main test3

で大丈夫なようです。
確認できたので、思い切って大幅に書き直しました。
その作業は、

です。スッキリしました。明日に続く。





開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。