Go言語/gotronでHTMLのボタンイベントをGo側で受け取る方法(WebSocket)
gotronを使うにあたり、ウィンドウを出した後の動きはHTML/Javascriptで十分処理可能なのですが、それだとせっかくGo言語を使った意味があまりないので、UIはHTML/CSSで制御はGo言語を目指したいところです。そんな中、UIのボタンイベントをGo言語側で受け取る方法について、ここのREADMEを参考に書いてみました。
HTML側のソース
HTML側のソースです。ボタンを設置しそれを押すとWebSocketを使ってデータを送信してくれます。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=<device-width>, initial-scale=1.0"> <title>Document</title> </head> <body style="-webkit-app-region: drag"> <h1>Hello World!</h1> <div> <!-- <button style="-webkit-app-region: no-drag">終了</button> --> <button onclick="sendMessage();">Send</button> </div> <script> let ws = new WebSocket("ws://localhost:" + global.backendPort + "/web/app/events"); function sendMessage(){ ws.send(JSON.stringify({ "event": "event-name", "AtrNameInFrontend": "Hello World!", })) } </script> </body> </html>
Go言語側のソース
window.On
で受け取ることができます。
package main import ( "github.com/Equanox/gotron" "bytes" "fmt" ) func main() { window, err := gotron.New("apps") if err != nil { panic(err) } window.WindowOptions.Width = 800 window.WindowOptions.Height = 600 window.WindowOptions.AutoHideMenuBar = true done, err := window.Start() if err != nil { panic(err) } window.On(&gotron.Event{Event: "event-name"}, func(bin []byte) { buf := bytes.NewBuffer([]byte(bin)) fmt.Println("Message: ", buf) }) <-done }
ボタンをクリックするとターミナルに以下のように出力されます。
Message: {"event":"event-name","AtrNameInFrontend":"Hello World!"}
スポンサーリンク