TWSNMP MW開発7日目:Solid.jsの開発に慣れてきたがWails v3の問題に悩まされる
今朝は6時まで寝てしまいました。目を覚ますと眼の前に助手の猫さんの顔がありました。しばらく、黙っていましたが、起きなさいと言って先導されました。
Solid.jsによる開発には少し慣れてきました。考えている画面の動きを、なんとか作れるようなってきました。快調かと思ったらWails v3の問題に遭遇しました。見つけた問題は2つです。
1つ目はGO言語側の関数が
func (t *Twsnmp) GetSites() []Site {
ret := []Site{}
t.Sites.Range(func(k, v any) bool {
if s, ok := v.(Site); ok {
ret = append(ret, s)
}
return true
})
return ret
}
の用な感じにして登録したSIteの配列を返そうとすると、JavaScript側の関数定義が、
export async function GetSites() : Promise<Site> {
return Call.ByName("main.Twsnmp.GetSites");
}
のように配列じゃない型を返すようになっている問題です。
あまり、美しくないですが
const l = await GetSites() as any;
setSites(l)
のようにanyに型変換すれば、エラーはなくなって、データをも受け取れるので、これの方法で回避しておきました。
もう一つは、JavaScript側からstructのパラメータをGO言語側の関数に渡そうとすると発生するエラーです。VSCodeにはエラーが表示されないですが、実行した時にエラーが発生します。
GO言語側が
func (t *Twsnmp) UpdateSite(s Site) {
if s.Id == "" {
s.Id = fmt.Sprintf("%x", time.Now().UnixNano())
s.State = "unknown"
}
t.Sites.Store(s.Id, s)
}
の関数をJavaScipt側から
await UpdateSite(site);
のように呼んだ時に発生します。
こちらは、いろいろ試した結果、
func (t *Twsnmp) UpdateSite(id, name, url, user, password string) {
のように、structでまとめて渡すのはやめて、stringを沢山ならべて回避しました。
どちらの問題も、wails v3のIssuesに報告されているようなので、修正されると思います。
なんとか、TWSNMP FCを登録してリスト表示するところまでできました。
左端の状態のアイコンは、Solid.jsのコンポーネントを作っていい感じに表示できています。少し開発のコツを掴んだ気がして嬉しいです。
(状態はテスト用のダミーです。)
昨日、TWSNMP FCのフィードバックがありましたが、その回答は
です。
明日に続く
いいなと思ったら応援しよう!
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。
ソフトウェアのマニュアルをnoteの記事で提供しています。
サポートによりnoteの運営にも貢献できるのでよろしくお願います。