閒着無聊又玩go語言找虐。。。——用go開發windows應用程序android
想要用go開發windows應用必須先要安裝必要的組件:
git
walk集成了不少windows的控件github
go get github.com/lxn/walk
win是go調用windowsApi的一種實現shell
go get github.com/lxn/win
rsrc是鏈接walk/win和windows動態鏈接的工具windows
go get github.com/akavel/rsrc
有了這些咱們就能實際的編碼了工具
先測試一下winApi的有效性:開發工具
看了一下這位寫的,比較到位,把以前編譯運行報錯的問題也找到了,恩感謝,可是源碼裏有段字符串拼錯了測試
更正一下:優化
// GoWin project GoWin.go package main import ( "github.com/lxn/win" "strconv" "syscall" ) func _TEXT(_str string) *uint16 { return syscall.StringToUTF16Ptr(_str) } func _toString(_n int32) string { return strconv.Itoa(int(_n)) } func main() { var hwnd win.HWND cxScreen := win.GetSystemMetrics(win.SM_CXSCREEN) cyScreen := win.GetSystemMetrics(win.SM_CYSCREEN) win.MessageBox(hwnd, _TEXT("屏幕長-:"+_toString(cxScreen)+"寬:"+_toString(cyScreen)), _TEXT("消息<a target=\"_blank\" href=\"http://blog.csdn.net/songbohr\">http://blog.csdn.net/songbohr</a>"), win.MB_OK) }
注意:win組件裏的phd.go中,ui
//這行要註釋,若是你不是WIN7的狂熱愛好者的話 //pdh_AddEnglishCounterW = libpdhDll.MustFindProc("PdhAddEnglishCounterW")
http://blog.csdn.net/songbohr/article/details/10511041
編譯運行成功,注意這裏必須是package main否則不會生產exe
package main
接下來試一下walk能不能行:
package main import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" "strings" ) func main() { var inTE, outTE *walk.TextEdit MainWindow{ Title: "SCREAMO", MinSize: Size{600, 400}, Layout: VBox{}, Children: []Widget{ HSplitter{ Children: []Widget{ TextEdit{AssignTo: &inTE}, TextEdit{AssignTo: &outTE, ReadOnly: true}, }, }, PushButton{ Text: "SCREAM", OnClicked: func() { outTE.SetText(strings.ToUpper(inTE.Text())) }, }, }, }.Run() }
編譯運行成功,可是運行沒結果,
搞了半天,仔細看了一下walk的文檔
原來是要這樣搞:
首先新建一個文件好比test.manifest(感受作着絕對是個android粉)填入以下代碼
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> </assembly>
運行以下命令
rsrc -manifest 你應用的名字.manifest -o rsrc.syso go build go build -ldflags="-H windowsgui"
運行生成的exe,就能看到熟悉的windows界面了
感受go開發windows應用仍是不怎麼方便,並且不太經濟,調試和編譯耗費的精力很大,
期待之後開發工具能再進一步優化一下