About Walk ========== Walk is a "Windows Application Library Kit" for the Go Programming Language. Its primarily useful for Desktop GUI development, but there is some more stuff. Setup ===== Make sure you have a working Go installation. See [Getting Started](http://golang.org/doc/install.html) ##### Note Walk currently requires Go 1.11.x or later. ##### To Install Now run `go get github.com/lxn/walk` Using Walk ========== The preferred way to create GUIs with Walk is to use its declarative sub package, as illustrated in this small example: ##### `test.go` ```go 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() } ``` ##### Create Manifest `test.manifest` ```xml PerMonitorV2, PerMonitor True ``` Then either compile the manifest using the [rsrc tool](https://github.com/akavel/rsrc), like this: go get github.com/akavel/rsrc rsrc -manifest test.manifest -o rsrc.syso or rename the `test.manifest` file to `test.exe.manifest` and distribute it with the application instead. ##### Build app In the directory containing `test.go` run go build To get rid of the cmd window, instead run go build -ldflags="-H windowsgui" ##### Run app test.exe ##### Sample Output (Windows 7) ![alt tag](http://i.imgur.com/lUrgE2Q.png) ##### More Examples There are some [examples](examples) that should get you started. Application Manifest Files ========================== Walk requires Common Controls 6. This means that you must put an appropriate application manifest file either next to your executable or embedded as a resource. You can copy one of the application manifest files that come with the examples. To embed a manifest file as a resource, you can use the [rsrc tool](https://github.com/akavel/rsrc). IMPORTANT: If you don't embed a manifest as a resource, then you should not launch your executable before the manifest file is in place. If you do anyway, the program will not run properly. And worse, Windows will not recognize a manifest file, you later drop next to the executable. To fix this, rebuild your executable and only launch it with a manifest file in place. CGo Optimizations ================= The usual default message loop includes calls to win32 API functions, which incurs a decent amount of runtime overhead coming from Go. As an alternative to this, you may compile Walk using an optional C implementation of the main message loop, by passing the `walk_use_cgo` build tag: go build -tags walk_use_cgo