回覆列表
-
1 # 深圳神盾局
-
2 # 阿柏的個人號
golang qt這個就不多說了,govcl透過呼叫vcl介面。兩個專案都可以看看。都支援跨平臺。govcl是國人開開發的。再補充一個,直接用web做介面也是一個不錯的選擇。
-
3 # 苦苦tt
golang肯定可以做ui的。
主要看你需求,是否需要跨平臺。
以下推薦沒有驗證過,
windows下https://github.com/lxn/walk
跨平臺https://z-kit.cc/
還有一種可以用web來做,相當於golang搞個伺服器後端。
-
4 # 信仰者18038220
可以試用下wails,可以跨平臺,用vue或者react等h5前端框架做介面,生成的應用程式比electronjs小很多,因為不會內嵌個瀏覽器。https://github.com/wailsapp/wails
-
5 # 程式設計師葉子
是的 ,go可以做介面,但普遍的做法是不做。go還是用於做後端開發較強,發揮它的優勢方面如高併發跨平臺編譯快速api開發等等。
有人說那我需要個監控介面,不想要命令列操作呢?很簡單呀,單獨做個客戶端呀,如做流量控制設定引數設定什麼的 ,沒必要非得和業務邏輯處理搞一起,如qt或者搞個web介面,現在通訊都很方便的,http,tcp,ws你隨便上,和你主程式很容易通訊。
-
6 # huzibbs
如果純做桌面應用開發推薦go+govcl,支援跨平臺,有現成的設計器,方案也比較成熟,簡單易學,類似delphi介面設計器,體積也不大。
說起介面,這是一道坎,有人或許會說,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
先來了解下控制代碼,什麼叫做控制代碼?控制代碼可以說是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