Go 编译错误: 'OnClosing' 字段不存在于 walk.MainWindow 结构体中

错误原因

在声明 MainWindow 时,使用了 OnClosing 字段,但是该字段在 walk.MainWindow 结构体中并不存在。

解决方法

OnClosing 字段改为 OnSizeChanged。因为 walk.MainWindow 结构体中存在 OnSizeChanged 字段,可以使用该字段代替 OnClosing

修改后的代码

package main

import (
    "fmt"
    "github.com/gen2brain/dlgs"
    "github.com/lxn/walk"
    . "github.com/lxn/walk/declarative"
    "io"
    "net/http"
    "os"
    "path/filepath"
)

func downloadFile(url string, filepath string) error {
    // 创建文件
    out, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer out.Close()

    // 发送请求并下载文件
    resp, err := http.Get(url)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    // 写入文件
    _, err = io.Copy(out, resp.Body)
    if err != nil {
        return err
    }

    return nil
}

func writeIni(name string) error {
    // 获取用户目录
    userDir, err := os.UserHomeDir()
    if err != nil {
        return err
    }

    // 获取配置文件路径
    iniPath := filepath.Join(userDir, "HC.ini")

    // 创建配置文件
    f, err := os.Create(iniPath)
    if err != nil {
        return err
    }
    defer f.Close()

    // 写入配置
    _, err = f.WriteString("[general]
")
    if err != nil {
        return err
    }

    return nil
}

func main() {
    var (
        entry *walk.LineEdit
        mainWindow  *walk.MainWindow
    )

    // 创建GUI界面
    MainWindow{
        AssignTo: &mainWindow,
        Title:   '证书下载和配置',
        MinSize: Size{Width: 300, Height: 100},
        Layout:  VBox{},
        Children: []Widget{
            LineEdit{
                AssignTo: &entry,
            },
            PushButton{
                Text: '下载证书并写入配置',
                OnClicked: func() {
                    // 获取编辑框内容
                    entryText := entry.Text()

                    // 如果编辑框内容为空,则提示错误信息
                    if entryText == '' {
                        dlgs.Error('错误', '请输入编号')
                        return
                    }

                    // 下载证书
                    filepath := filepath.Join(os.Getenv('USERPROFILE'), 'Desktop', 'mitmproxy-ca-cert.p12')
                    err := downloadFile('http://mitm.it/cert/p12', filepath)
                    if err != nil {
                        dlgs.Error('错误', fmt.Sprintf('下载证书失败: %v', err))
                        return
                    }

                    // 写入配置文件
                    err = writeIni(entryText)
                    if err != nil {
                        dlgs.Error('错误', fmt.Sprintf('写入配置文件失败: %v', err))
                        return
                    }

                    // 提示设置完成信息
                    dlgs.Info('信息', '设置完成,证书已下载到桌面请手动安装')
                },
            },
        },
        OnSizeChanged: func() {
            mainWindow.Hide()
        },
    }.Run()
}

说明

OnSizeChanged 字段用于监听窗口大小变化,在窗口大小变化时执行回调函数。在本例中,回调函数中隐藏了主窗口。

其他

如果需要在窗口关闭时执行其他操作,可以使用 OnClosing 字段,但需要将其添加到 walk.MainWindow 结构体中。

希望以上解决方案能够帮助您解决问题。如果您有任何疑问,请随时提问。

Go 编译错误: 'OnClosing' 字段不存在于 walk.MainWindow 结构体中

原文地址: https://www.cveoy.top/t/topic/nRQd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录