Go语言:Windows下最好用的桌面GUI库(lxn/walk 起步教程)

本文分享了一款基于Windows API的高性能GUI库,作者海东喵对比多种第三方库后,发现此库功能接近C# Winform,经过三个月研究,开始撰写教程。文章详细介绍了前置安装步骤,提供了代码实例,包括如何创建窗口、设置位置大小及标题,以及如何生成和编译清单文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇转载的文章我运行不起来???尴尬,报的异常原文下面有评论,但是我还是无法解决

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x61ae2e]

goroutine 1 [running, locked to thread]:
main.main()

 

导言:

  • 本人(海东喵) 学过一堆 第三方桌面GUI库,但是那些库不是 BUG一堆,就是 功能有很大的欠缺
  • 今天我要推荐给大家的这款是以 Windows API 做的 GUI库,他的 性能功能都很完美目前没有太大的缺陷
  • 我研究了将近 3个月 了,发现功能上很接近 C# winform 了,所以开始写教程分享给想学GUI的同学。

前置安装:


 

go get github.com/akavel/rsrc
go get github.com/lxn/win
go get github.com/lxn/walk

代码实例:


 

package main

import (
    "syscall"

    "github.com/lxn/walk"
    "github.com/lxn/win"
)

func main() {
    window, _ := walk.NewMainWindow()

    // 设置窗体标题
    window.SetTitle(`你好世界!`)

    // 设置窗体的宽高
    window.SetWidth(400)
    window.SetHeight(400)

    // 设置窗体生成在屏幕的正中间
    // 窗体横坐标 = ( 屏幕宽度 - 窗体宽度 ) / 2
    // 窗体纵坐标 = ( 屏幕高度 - 窗体高度 ) / 2
    window.SetX((int(win.GetSystemMetrics(0)) - window.Width()) / 2)
    window.SetY((int(win.GetSystemMetrics(1)) - window.Height()) / 2)

    // 设置窗体为显示状态(默认:隐藏状态)
    window.Show()

    // 运行窗体
    window.Run()
}

创建清单文件 main.manifest


文件说明:

  • main.manifest应用程序配置元数据清单文件(不懂可以绕过,不用去理解也行)
  • main.manifest 保存在 main.go同级目录下
  • 直接复制 “文件内容” 即可,没特殊情况不用修改

文件内容:

 

<?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>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>

生成 / 编译:


第一步:将 main.manifest 生成为 main.syso

  • 这个步骤只需要运行一次, 调试/编译 只需一直执行 第二步
  • 生成的 main.syso可以拿到别的 GUI 项目中使用的
  • 除非你想修改 main.manifest 或者 图标文件 才要重新生成一次
  • 在当前窗口下 打开 cmd,运行如下命令:

 

rsrc -manifest main.manifest -o main.syso

备注:如果找不到rsrc命令,请在github.com\akavel\rsrc目录下执行go build,并将生成的rsrc.exe放入到GOROOT/bin目录下

第二步:编译成独立的 exe 文件

  • 不管 调试 还是 正式编译,都必须通过 双击 exe 文件运行,无法使用 go run main.go 直接运行
  • 调试:

 

go build
  • 正式编译:

 

go build -ldflags="-H windowsgui -w -s"

运行结果:



备注:直接使用go build生成exe后运行时会出现dos窗口,因为在编译的时候将编译窗口融合在了一起,因此在build的时候使用go build -ldflags="-H windowsgui" 这样就可以避免出现这种情况了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值