golang的優勢自沒必要說了,這麼好的語言怎麼能缺乏界面庫呢?因此我使用miniblink開發了一個能夠用html,css,js開發界面的瀏覽器,經過它你能爲你的golang開發簡單的界面。說白了其實就是輕量級瀏覽器,暫且叫它browser吧,多輕呢,哈哈只有6.8M大小。點這裏下載javascript
怎麼使用呢?css
1 首先創建golang服務了,能夠是http rpc socket websocket等html
2 用html,js,css寫好界面,用browser打開它與golang通訊java
3 固然browser也能夠自定義界面golang
命令行調用browserweb
browser.exe --url=http://127.0.0.1 --custom-ui=2 或瀏覽器
browser.exe --url=D:\index.html --ico=D:\favicon.icowebsocket
命令行參數:socket
--url 打開頁面的地址(必傳)
--width 窗口的款(可選)
--height 窗口的高(可選)
--top 窗口距屏幕上邊的距離(可選)
--left 窗口距屏幕下邊的距離(可選)
--max 是否最大化,1是 0否(可選)
--full-screen 是否全屏,1是 0否(可選)
--custom-ui 是否用戶自定義ui,1是 0否 2帶陰影(可選)
--ico 指定ico路徑,默認讀取網頁的favicon(可選ide
自定義界面須要本身寫代碼,注意最大化,最小化和關閉按鈕js調用
<!doctype html> <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style> html,body{ margin:0; background:#fff; height:100%; } *:not(input,textarea) { -webkit-user-select: none; } /*標題欄*/ #header{ position:absolute; top:0px; left:0px; height:28px; width:100%; background:rgb(52,152,220); cursor:default; } /*中間內容欄*/ #container{ box-sizing:border-box;/*使高度包含padding*/ height:100%; width:100%; padding-top:28px; padding-bottom:35px; margin:0 auto; overflow:auto; } /*底欄*/ #footer { height:35px; width:100%; position: absolute; bottom:0; left:0; z-index:100; background:rgb(239,237,238); text-align:right; padding:3px 5px; box-sizing:border-box; } /*中間內容欄 左側列*/ #container .lside{ height:100%; width:150px; float:left; background:rgb(110,179,210); } /*中間內容欄 右側列*/ #container .rside{ height:100%; margin-left:150px; background:#FFF; padding:20px; box-sizing:border-box; } #footer button{ padding:4px 13px; font-size:12px; background:rgb(27,174,93); color:white; border:0; } #footer button:hover { background:rgb(33,127,188); box-shadow: 0 0 5px rgba(81, 203, 238, 1); cursor:pointer; } #footer button:active { background:rgb(20,110,170); cursor:pointer; } #header .title-bar{ margin-right:75px; padding-left:10px; height:28px; line-height: 28px; font-size:9pt; color:#eee; } #header .ctrls{ width:75px; height:28px; float:right; } #header .ctrls a{ display:block; float:left; height:14px; font-family:"Marlett"; font-size:14px; padding:4px; color:#fff; cursor:default; } #header .ctrls a[id]:hover{ background:#6ebccf; } #header .ctrls a[id]:active{ background:#FF0000; } </style> <body> <div id="header"> <div class="ctrls"> <a id="window-min" onclick="external.hitmin()">0</a> <a id="window-max" onclick="this.innerText = external.hitmax()?'2':'1';">1</a> <a id="window-close" onclick="external.close()">r</a> </div> <div class="title-bar" onmousedown="external.hitCaption()"> <span class=title> 個人軟件 </span></div> </div> <div id="container"> <div class="lside"> </div> <div class="rside"> 當前時間:<?= time() ?> </div> </div> <div id="footer"> <button onclick="javascript:alert('哈哈哈^_^')">哈哈哈^_^</button> </div> </body> </html>
golang端代碼,這裏以httpserver爲例,注意必須等待browser的執行,這樣當關閉browser的時候,golang server也關閉了
func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { reader, _ := os.OpenFile("\ui.html", os.O_RDONLY, 0666) defer reader.Close() contents, _ := ioutil.ReadAll(reader) _,_=fmt.Fprintf(writer, string(contents)) }) server := &http.Server{ Addr: ":8081", Handler: http.TimeoutHandler(http.DefaultServeMux, time.Second*30, "http server timeout"), } //start browser startSuccess := true time.AfterFunc(time.Millisecond * 200, func() { if !startSuccess { return } cmd := exec.Command("d:\\bin\\browser.exe", "--url=http://127.0.0.1:8081") _ = cmd.Start() _= cmd.Wait() _=server.Shutdown(nil) }) //start server err := server.ListenAndServe() if err != nil { startSuccess = false log.Fatal("server ListenAndServe: ", err) } }
最終效果圖: