我剛剛開始使用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的結構,以避免進行強制轉換。)但是在我看來,這似乎是一個非?;靵y的情況,并且會阻止我想要的那種語義。(即,使用XUtilConnection結構調用幾個不同模塊中的方法。)在設計過程中任何地方的任何建議,將不勝感激。謝謝!
如何在Go中使用子包正確構造一個包,而在大多數方法中,單個類型將成為子包?
幕布斯6054654
2021-04-26 17:01:16