Skip to content

Instantly share code, notes, and snippets.

@peterhellberg
Last active April 11, 2022 11:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterhellberg/022de9ed718635115b09a8df854f99f3 to your computer and use it in GitHub Desktop.
Save peterhellberg/022de9ed718635115b09a8df854f99f3 to your computer and use it in GitHub Desktop.
Webview GUI
package main
import (
"fmt"
"net"
"net/http"
"sync"
"text/template"
"github.com/zserge/webview"
)
func main() {
port, err := freePort()
if err != nil {
panic("Unable to get a free port")
}
addr := fmt.Sprintf("0.0.0.0:%d", port)
var wg sync.WaitGroup
wg.Add(1)
go runServer(addr, &Handler{}, &wg)
wg.Wait()
w := webview.New(false)
defer w.Destroy()
w.SetTitle("Webview GUI")
w.SetSize(640, 400, webview.HintFixed)
w.Navigate("http://" + addr)
w.Run()
}
func runServer(addr string, handler http.Handler, wg *sync.WaitGroup) error {
hs := &http.Server{
Addr: addr,
Handler: handler,
}
wg.Done()
return hs.ListenAndServe()
}
func freePort() (int, error) {
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
if err != nil {
return 0, err
}
l, err := net.ListenTCP("tcp", addr)
if err != nil {
return 0, err
}
defer l.Close()
return l.Addr().(*net.TCPAddr).Port, nil
}
type Handler struct {
Count int
}
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
h.Count++
t.Execute(w, h)
}
var t = template.Must(template.New("name").Parse(`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
body { background-color: #00ADD8; font-family: Helvetica, sans-serif; color: #FFFFFF; }
h1 { font-size: 4rem; margin-bottom: 0.5rem; }
a { font-size: 2rem; color: #004759;}
</style>
</head>
<body>
<h1>Count: {{.Count}}<h1>
<a href="/">Increment count</a>
</body>
</html>`))
@peterhellberg
Copy link
Author

Webview GUI

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment