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

如何在Go中使用子包正确构造一个包,而在大多数方法中,单个类型将成为子包?

如何在Go中使用子包正确构造一个包,而在大多数方法中,单个类型将成为子包?

Go
幕布斯6054654 2021-04-26 17:01:16
我刚刚开始使用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
提交
取消
意见反馈 帮助中心 APP下载
官方微信