Need help with govcl?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

ying32
1.3K Stars 153 Forks Apache License 2.0 1.3K Commits 2 Opened issues

Description

Cross-platform Go/Golang GUI library.

Services available

!
?

Need anything else?

Contributors list

# 35,145
delphi
gui-too...
lazarus
pascal
1208 commits
# 387,859
delphi
gui-too...
lazarus
golang
1 commit

中文 | English


Plan: Waiting for the release of Lazarus 2.2 version.


GoVCL

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) | Video tutorial(Unofficial) | Sponsor govcl


Support Platform

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)

liblcl

res2go IDE plugin source code(source code

How to use: Installation method

Note: Designed in Lazarus, code written in Golang.

usage:

Step 1: Get the govcl code

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.0.10+incompatible
.

Step 2: Write the code

  • 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!") }

Step 3: Copy the corresponding binary

  • 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

  • Linux: Copy

    liblcl.so
    under the current executable file directory (you can also copy
    liblcl.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

  • 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

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.


FAQ

Q: Why is there no English WIKI?
A: My English is bad. You can try using Google Translate Chinese WIKI.


API document


jetbrains
Thanks jetbrains

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.