中文 | English
Cross-platform Golang GUI library, The core binding is liblcl, a common cross-platform GUI library created by Lazarus.
GoVCL is a native GUI library, not based on HTML, let alone DirectUI library, everything is practical.
Full name: Go Language Visual Component Library
govcl minimum requirement is go1.9.2.
Screenshots | WIKI(Chinese) | What's-new(Chinese)
Windows | Linux | macOS
If you want to support linux arm and linux 32bit, you need to compile the corresponding liblcl binary.
Pre-compiled GUI library binary download (source code)
res2go IDE plugin source code(source code)
How to use: Installation method
Note: Designed in Lazarus, code written in Golang.
go get -u github.com/ying32/govcl
Note: You can also use go module mode, configure in go.mod, such as: github.com/ying32/govcl v2.2.0+incompatible
.
- Method 1(Use Lazarus to design the GUI. recommend):
package main
import (
// Do not reference this package if you use custom syso files
_ "github.com/ying32/govcl/pkgs/winappres"
"github.com/ying32/govcl/vcl"
)
type TMainForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
type TAboutForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
var (
mainForm *TMainForm
aboutForm *TAboutForm
)
func main() {
vcl.Application.Initialize()
vcl.Application.SetMainFormOnTaskBar(true)
vcl.Application.CreateForm(&mainForm)
vcl.Application.CreateForm(&aboutForm)
vcl.Application.Run()
}
// -- TMainForm
func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
}
func (f *TMainForm) OnBtn1Click(sender vcl.IObject) {
aboutForm.Show()
}
// -- TAboutForm
func (f *TAboutForm) OnFormCreate(sender vcl.IObject) {
}
func (f *TAboutForm) OnBtn1Click(sender vcl.IObject) {
vcl.ShowMessage("Hello!")
}
Method 1 needs to be used in conjunction with the res2go tool.
- Method 2(Pure code, imitating the way of FreePascal class):
package main
import (
// Do not reference this package if you use custom syso files
_ "github.com/ying32/govcl/pkgs/winappres"
"github.com/ying32/govcl/vcl"
)
type TMainForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
type TAboutForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
var (
mainForm *TMainForm
aboutForm *TAboutForm
)
func main() {
vcl.RunApp(&mainForm, &aboutForm)
}
// -- TMainForm
func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
f.SetCaption("MainForm")
f.Btn1 = vcl.NewButton(f)
f.Btn1.SetParent(f)
f.Btn1.SetBounds(10, 10, 88, 28)
f.Btn1.SetCaption("Button1")
f.Btn1.SetOnClick(f.OnBtn1Click)
}
func (f *TMainForm) OnBtn1Click(sender vcl.IObject) {
aboutForm.Show()
}
// -- TAboutForm
func (f *TAboutForm) OnFormCreate(sender vcl.IObject) {
f.SetCaption("About")
f.Btn1 = vcl.NewButton(f)
//f.Btn1.SetName("Btn1")
f.Btn1.SetParent(f)
f.Btn1.SetBounds(10, 10, 88, 28)
f.Btn1.SetCaption("Button1")
f.Btn1.SetOnClick(f.OnBtn1Click)
}
func (f *TAboutForm) OnBtn1Click(sender vcl.IObject) {
vcl.ShowMessage("Hello!")
}
-
Windows: Depending on whether the compiled binary is 32 or 64 bits, copy the corresponding
liblcl.dll
to the current executable file directory or system environment path.- Go environment variable:
GOARCH = amd64 386
GOOS = windows
CGO_ENABLED=0
- Go environment variable:
-
Linux: Copy
liblcl.so
under the current executable file directory (you can also copyliblcl.so
to/usr/lib/
(32bit liblcl) or/usr/lib/x86_64-linux-gnu/
(64bit liblcl) directory , Used as a public library).- Go environment variable:
GOARCH = amd64
GOOS = linux
CGO_ENABLED=1
- Go environment variable:
-
MacOS: Copy
liblcl.dylib
to the current executable file directory (note under MacOS: you need to create info.plist file yourself), or refer to: App packaging on MacOS- Go environment variable:
GOARCH = amd64
GOOS = darwin
CGO_ENABLED=1
- Go environment variable:
Note: The "current executable file directory" here refers to the location of the executable file generated by your currently compiled project.
Special Note: All UI components are non-threaded/non-coroutine safe. When used in goroutine, use vcl.ThreadSync to synchronize updates to the UI.
Special Note 2: If you use go>=1.15 to compile Windows executable files, you must use the -buildmode=exe
compilation option, otherwise there will be errors.
Q: Why is there no English WIKI?
A: My English is bad. You can try using Google Translate Chinese WIKI.