フロントをWebページにし、Goでローカルに建てたWebサーバをブラウザから操作する
#golang #備忘
Go + GUIを探す旅を続けてるけど、どうしてもこれ!というのが見つからない。
fyneなどのGUIライブラリはglfwに依存してて、glfwはIME対応していない。
つまりマルチバイト文字列の入力がめちゃくちゃ不便。
WebViewの道も探してるけど、フロント(SPA)もバックもGoで実装しようとすると、
その間の通信がめちゃくちゃ不便。
もう自分用のツールなんやし、GoでローカルにWebサーバ建てて、
そこで普通の遷移ありWebページ作ったらいいんじゃないかと思い始めた。
そんとき、Webサーバの起動と同時にブラウザでページを立ち上げたい。
ってののやり方を確認した。
環境
Windows 10
Go 1.15
ソース
code:main.go
package main
import (
"fmt"
"log"
"net"
"net/http"
"os/exec"
)
func main() {
log.SetFlags(log.LstdFlags | log.Llongfile)
// 空いてるポートを取る
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
log.Fatalln(err)
}
fmt.Println(fmt.Sprintf("http://%s", ln.Addr()))
// 空いてるポートでWebサーバの待ち受けを開始する
mux := http.NewServeMux()
mux.HandleFunc("/", func(writer http.ResponseWriter, _ *http.Request) {
_, _ = writer.Write([]byte("Hello, World"))
})
srv := http.Server{Handler: mux}
go srv.Serve(ln)
// 建てたWebサーバをブラウザで開く
cmd := exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", fmt.Sprintf(http://%s, ln.Addr()))
if err := cmd.Run(); err != nil {
log.Fatalln(err)
} else {
fmt.Println("run executed")
}
// ブロッキング
select {}
}
#2020/09/13週
更新履歴
2020/09/17 公開