先运行包内程序
解包后运行 bin 中的 hello_world,再重建 quickstart。Go SDK 使用 CGO 和 LLVM Clang,官方脚本通过 clang_go_cgo.py 适配 MSVC-target Clang 参数;不要随意混入 MinGW 运行库。
pwsh -File build.ps1 -Configuration Release -Output bin
.\bin\kui_go_hello_world.exe初始化与资源
程序先 kui.Load(),再 kui.Init()。UI API 在初始化线程使用。Window、Document 等拥有型对象及时 Close,通常使用 defer;不要等待 Go GC 决定原生资源释放时间。后台 goroutine 的结果通过 PostTask 返回 UI 线程。
运行范围
Go 层对接核心已有的 DOM、Lua、图形、媒体和扩展能力。3D 要另外部署 kui_ext_3d.dll,媒体需要对应后端。当前 GA 范围是 Windows x64,不能推断 Linux/macOS 同版可用。
完整窗口入口
下面的源码直接取自 SDK hello_world 示例。保留包内模块与辅助目录,在 SDK 工程内构建;不要只复制这个文件后期待依赖自动存在。
package main
import (
"log"
kui "github.com/kui-engine/kui-go/v3"
"github.com/kui-engine/kui-go/v3/examples/internal/exampleutil"
)
func main() {
if err := kui.Load(exampleutil.RuntimePath()); err != nil {
log.Fatal(err)
}
if err := kui.Init(); err != nil {
log.Fatal(err)
}
defer kui.Shutdown()
window, err := kui.NewWindow(kui.WindowProps{Title: "KUI Go SDK", Width: 960, Height: 640, Centered: true})
if err != nil {
log.Fatal(err)
}
defer window.Close()
document, err := window.Document()
if err != nil {
log.Fatal(err)
}
defer document.Close()
if err := document.LoadHTML(`<main style="padding:48px;font-family:sans-serif"><h1>Go SDK 已接入 KUI</h1><p>此程序仅通过公开 C ABI 工作。</p></main>`); err != nil {
log.Fatal(err)
}
if err := window.Show(); err != nil {
log.Fatal(err)
}
if _, err := kui.Run(); err != nil {
log.Fatal(err)
}
}
构建前检查
按现象缩小范围,再修改对应文件。
| 现象 | 检查与处理 |
|---|---|
| 找不到绑定或 native 库 | 确认从 SDK 工作区构建,路径指向该绑定附带的 native 目录。 |
| 启动报错或窗口不更新 | 核对运行库版本;让 UI 调用留在初始化线程,不阻塞事件循环。 |
| 工作线程结果无法安全更新界面 | 通过该绑定的主线程派发入口返回 UI,确认窗口仍存在。 |
文档有误或遗漏?
反馈此页问题 →