Golang可以做界面嗎?如何做?

雁塔菜農


說起界面,這是一道坎,有人或許會說,GO為什麼要寫界面UI呢,這本來不是GO擅長的部分,也不是GO該乾的事情,這句話我就不愛聽了。

舉個列子,比如我們用GO語言寫個服務器,這個服務器就是用作直播視頻聊天的服務器,它的功能包含直播房間在線列表人員,當然GO語言設計的時候,服務器記錄了在線列表的 userId、roomId、token、level、ip、chatConent等等。比如我們要監視某個房間的人員列表,看他是否用協議刷了人氣,其實就是統計一個IP上有多少帳號,或者監控房間裡面是否有機器人在發言,並隨時封禁它,或者統計在線直播列表的人數等等,我們用命令行是能夠操作上述的東西,但是這麼多的動作你能記得住那麼多的命令嗎?

而且上述那麼多的東西顯示在黑色框子裡面,眼睛看久了不累嗎?一旦命令行用錯了,承擔起後果嗎?

在命令行裡面去選擇一個用戶或者房間那是一件多麼痛苦的事情啊。

而且這些後臺管理員又不是技術人員,很可能會出錯。

因此界面是必須有的。

GO語言中選擇界面是一件糾結的事情,github上面GO-UI要麼項目幾年沒人更新了,要麼簡單的功能讓人不多看一眼。

比如 谷歌自帶gxui已經死掉了,goqt的下載一大堆的東西去配置,go-gtk配置也麻煩,而且功能也是簡單。

假如在linux下,我建議還是選擇後面的兩個,那是沒得選擇的選擇。

在WINODWS 目前推薦https://github.com/lxn/walk 這個東西,目前在GITHUB上最新的版本是需要GO1.8去構建的,否則百分百會出錯。

下載下來看下demo

有複製粘帖、數據綁定、圖片顯示、webkit、繪圖、listbox、托盤、tab、滑動條、拖動文件、進度條、按鈕、選擇框、單選框等等。功能挺全面的,可以去實驗下。

先來了解下句柄,什麼叫做句柄?句柄可以說是windows上集合所有打開了的界面程序上的控件ID一樣,代表了唯一身份,其實底層還是指針,每次打開程序,句柄由系統隨機分配命名,不存在兩個句柄是一樣的。句柄包含了窗口句柄和控件句柄。

walk下載下來的包這麼小,而且編譯出來的程序也這麼小,那就肯定是調用了WINDOWS內置的一些com組件和active控件,這些東西存在於DLL中,一般位於在system32目錄下或者程序運行的當前目錄下,像QT5這些不是調用window內置的,因此QT編譯出來的程序是找不到控件句柄的。比如QQ、YY、迅雷這些軟件是找不到控件的句柄的,只能找到窗口句柄,因為這些控件是DX畫出來了。

句柄是一個類似整數一樣的數值。

在windows設計不同語言的交互的時候,dll文件是一條逃不過去的坑,先來看下C/C++、GO的類型不同的定義

Win32 C/C++ golang 字符對照表

WIN32類型 C/C++ 類型 GO 類型

HANDLE void * uintptr

BYTE unsigned char uint8, byte

SHORT short int16

WORD unsigned short uint16

INT int int32, int

UINT unsigned int uint32

LONG long int32

BOOL int int

DWORD unsigned long uint32

ULONG unsigned long uint32

CHAR char byte

WCHAR wchar_t uint16

LPSTR utf8/char * *byte

LPCSTR const utf8/char * *byte, syscall.StringBytePtr(), xc.UTF8PtrToSting()

LPWSTR wchar_t * *uint16

LPCWSTR const wchar_t * *uint16, syscall.StringToUTF16Ptr()

FLOAT float float32

DOUBLE double float64

LONGLONG __int64 int64

DWORD64 unsigned __int64 uint64


深圳神盾局


可以,gui


WCODER


golang肯定可以做ui的。

主要看你需求,是否需要跨平臺。

以下推薦沒有驗證過,

windows下https://github.com/lxn/walk

跨平臺https://z-kit.cc/

還有一種可以用web來做,相當於golang搞個服務器後端。


苦苦tt


golang qt這個就不多說了,govcl通過調用vcl界面。兩個項目都可以看看。都支持跨平臺。govcl是國人開開發的。


分享到:


相關文章: