我刚刚开始使用Go,所以如果我错过了明显的事情,请轻松:-)无论如何,我目前正处于编写实用程序库的设计阶段,该实用程序库将使与x-go-binding的交互更加容易。(例如,我之前使用Python和xpyb进行过此操作。)例如,它将有助于查询EWMH规范中定义的信息以及将键绑定到回调函数。(还有更多。)因此,作为我对包装布局的最初想法,请考虑:实用程序ew钥匙扣每个地方都有自己的包裹。(类似于如何设置标准库的图像包。)我的情况的独特之处在于,几乎每个x-go-binding调用都需要xgb连接对象或根窗口标识符的某种组合。因此,对我来说,将信息存储在这样的结构中很有意义:type XUtilConnection struct { conn xgb.Conn root xgb.Id // a few other things, like a mapping of events to callbacks}这样我就有了一个可以像这样使用的工厂:xconn = xutil.NewXUtilConnection(blah blah)它可以像这样使用:xconn.get_active_window()xconn.bind_key("Shift-a", my_callback_fun)也可能有类似的功能:keybind.get_keycode("a")ewmh.get_atom("_NET_ACTIVE_WINDOW")我的问题当然是,据我所知,接收者只能是在同一包中声明的类型。如果我分开我的程序包,则不能在任何子程序包中将XUtilConnection类型用作接收方。我怀疑我的答案是将这个大程序包分成不同的逻辑文件,但是我担心这可能导致名称空间混乱。(例如,实现EWMH规范可能大约需要100多个功能。)我也知道我可以在每个子包中为XUtilConnection对象定义一个新的容器类型。(我听说这应该是一个包含单个成员XUtilConnection的结构,以避免进行强制转换。)但是在我看来,这似乎是一个非常混乱的情况,并且会阻止我想要的那种语义。(即,使用XUtilConnection结构调用几个不同模块中的方法。)在设计过程中任何地方的任何建议,将不胜感激。谢谢!
2 回答
- 2 回答
- 0 关注
- 295 浏览
添加回答
举报
0/150
提交
取消