Go言語でHyperVWebViewerというWebアプリケーションを初めて作ったので、その感想を書きます。Webアプリケーションと呼ぶには痴がましいかも知れませんが、初めてなのでそこは堪忍して下さい。
ちなみに、前回記事には「なぜ作ったのか」を書き、前々回記事には、短い紹介記事も書いています。そちらも見て頂けると嬉しいです。

Go言語について

今まで、Go言語で何かアプリケーションを作ったという経験はありません。ただし、Go言語って面白そうだなぁと思い、個人で色々と学習はしていました。なので、今回初めて(小さな)Webアプリケーションを作ってみましたが、総じて楽しく作ることができました。

Go言語によるWebサーバについて

Go言語のWebサーバであれば、RevelGojiなどが有名です。
ただし、今回はそんな大それたアプリケーションを作るつもりはないため、
標準ビルトインのパッケージ「net/http」と「html/template」のみを使用してWebサーバを作成しました。標準であるのは有難いですね。

次のサイトを参考にさせてもらいました。ありがとうごいます。
build-web-application-with-golang
Codelab: Webアプリケーションを書いてみよう – golang.jp
Go言語でhttpサーバーを立ち上げてHello Worldをする – Qiita
Writing Web Applications – The Go Programming Language

また、テンプレートエンジンまで標準であるのは驚きました。
AngularMustacheみたいに使えます。Angularは言い過ぎですが…

迷走した点

VM情報の保持にStructを使用したのですが、そのStruct内の情報を関数に渡す箇所で迷走しました。

例えば、Structを引数に取る関数を定義する際に*を使用する事や、その関数を使用する際に&が必要な事などです。

ここが理解できず、プログラムしていた為、実際に動かしてみたら、VM情報が全く表示されず焦りました。Pointerについて、もっと理解が必要ですね。

クライアントサイドについて

クライアントサイドでは、Foundation6 Siteを使用しました。
全然凝っていないため、あまり語ることがない…

ただ、テーブル表示で昇順などに並び替えられるようにできれば良いなぁや検索できるようになれば便利かなぁと思っています。後々の課題という事で、要望などがあれば追加します。

Powershellについて

Hyper-V上の情報の取得や制御に、Go言語から次のようにPowershellコマンドを呼び出しています。

JSON出力

Powershellには標準で、コマンドのアウトプットをプイプラインで繋げて、JSON形式で出力することが可能です。こんな感じ

JSON形式であれば、Go言語に限らずWebアプリケーションで汎用的に利用可能なため、標準で備わっているのは便利だなぁと思います。

文字コード

Go言語で文字を扱う場合、文字コードがUTF-8である必要があります。ですが、Powershellの出力文字コードはUTF-8ではありません。英数字のみであれば問題ないのですが、日本語を出力する際は文字コードを変換する必要がありました。

HyperVWebViewer内では、コマンドchcpを次のように使用して、Powershellのコマンド出力の文字コードをUTF-8に変えています。

あまり綺麗な方法ではないと思っているので、他に良い方法があれば教えて欲しいです。

最後に

最初にも書きましたが、Go言語でWebアプリケーションを作ったのは初めてです。
というか、アプリケーションを作ったのが初めてです。
なので、汚いコードもあると思いますが、
そこは、githubでツッコんで頂ければ幸いです。