为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 golang 库中的回调函数?

如何使用 golang 库中的回调函数?

Go
杨魅力 2023-06-12 15:03:33
我对 Go 还是比较陌生,我决定尝试一些 OpenGL,因为存在一个为此提供绑定的 Go 库。作为设置 OpenGL 的一部分,我需要使用 Go glfw 库。我需要使用 glfw 库函数SetFramebufferSizeCallback ,它需要一个FrameBuffersizeCallback类型的参数;所以我基本上需要传递一个与我相信我已经完成的类型的签名相匹配的函数。但是,我不断收到以下错误:./main.go:43:35: 不能在 window.SetFramebufferSizeCallback 的参数中使用 fbCallback(类型 func(*glfw.Window,int32,int32))作为类型 glfw.FramebufferSizeCallback我真的不确定为什么会这样。我检查过我的 glfw 版本是否与文档匹配;我已经检查了 github 和我的机器上的实现代码,它们都是一致的。所以我不知道我做错了什么。这是我的代码,如果构建它应该不会做任何有趣的事情,但会显示错误:package mainimport (    "github.com/go-gl/gl/v3.3-core/gl"    "github.com/go-gl/glfw/v3.2/glfw"    "log"    "runtime")func fbCallback(window *glfw.Window, width int32, height int32) {    gl.Viewport(0, 0, width, height)}func init() {    runtime.LockOSThread()}func main() {    err := glfw.Init()    if err != nil {        panic(err)    }    defer glfw.Terminate()    glfw.WindowHint(glfw.ContextVersionMajor, 3)    glfw.WindowHint(glfw.ContextVersionMinor, 3)    glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)    window, err := glfw.CreateWindow(640, 480, "Testing", nil, nil)    if err != nil {        panic(err)    }    window.MakeContextCurrent()    if err := gl.Init(); err != nil {        log.Fatalln(err)    }    gl.Viewport(0, 0, 800, 600)    window.SetFramebufferSizeCallback(fbCallback) //Does not work}我对这应该如何真正工作的理解在以下有效的简短程序中得到了证明。我很高兴有人指出为什么这个简短的示例有效而上面的示例无效。我的理解可能有一些漏洞。package mainimport (    "fmt")type callback func(int, int) intfunc sum(x int, y int) int {    return x + y}func useCallback(cb callback) {    result := cb(2, 3)    fmt.Println(result)}func main() {    useCallback(sum)}
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞


type FramebufferSizeCallback func(w *Window, width int, height int)

对比

func fbCallback(window *glfw.Window, width int32, height int32)

您的函数没有相同的签名,它使用的是 int32 而不是 int。


查看完整回答
反对 回复 2023-06-12
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信