最近公司需要做一個(gè)上傳工具,因?yàn)樯蟼鞯奈募赡芎脦讉€(gè)G,所以用傳統(tǒng)的http上傳是很不現(xiàn)實(shí)的七咧,大家就想著做成客戶端,但是要跨平臺(tái)叮叹,所以就進(jìn)行技術(shù)選型艾栋,當(dāng)時(shí)大家最先想到的就是electron,但是electron打出來的包很大,因?yàn)樗岩粋€(gè)瀏覽器內(nèi)核也給打包進(jìn)去了蛉顽。后來就想起了用go寫蝗砾,因?yàn)間o也是跨平臺(tái)的,然后百度找了幾個(gè)携冤,都是文檔不全悼粮,偶然看到一個(gè)框架叫wails,而且這個(gè)相對(duì)于其他的幾個(gè)還有個(gè)文檔曾棕,關(guān)鍵是目前幾大js框架都支持扣猫,wails是使用系統(tǒng)本身的系統(tǒng)內(nèi)核,mac/linux使用的是webkit翘地,windows使用的是mshtml申尤,目前就是ie內(nèi)核癌幕,因?yàn)閕e太落后目前好多不兼容,github上很多人提issure昧穿,作者后期考慮換用edge內(nèi)核序芦。下面是做完效果圖
安裝wails
首先你的安裝好go的sdk
go get github.com/wailsapp/wails/cmd/wails
后續(xù)更新命令
wails init
如圖所示,然后選擇你要使用的js框架粤咪,我這里用的是vue谚中,所以選擇的是3
構(gòu)建項(xiàng)目
用ide打開新建的go項(xiàng)目,我這里用的是goland
go mod download
默認(rèn)使用的是go mod寥枝,所以要下載依賴宪塔,最好用代理,不然估計(jì)會(huì)超級(jí)慢囊拜,甚至?xí) ? 這是我的環(huán)境變量配置某筐,goland也需要配置
GOROOT gosdk解壓目錄
GOPATH 存放代碼和依賴庫(kù)的地址,需要新建
GO111MODULE auto 自動(dòng) on 使用mod off 不使用mod
GOPROXY https://goproxy.io或者h(yuǎn)ttps://mirrors.aliyun.com/goproxy/ 下載依賴代理冠跷,速度快
項(xiàng)目結(jié)構(gòu)
frontend是一個(gè)標(biāo)準(zhǔn)的前端項(xiàng)目結(jié)構(gòu)南誊,可以用webstorm打開,和平時(shí)開發(fā)沒啥不一樣
運(yùn)行程序
wails serve //運(yùn)行g(shù)o項(xiàng)目蜜托,啟動(dòng)一個(gè)網(wǎng)橋抄囚,這樣js可以直接調(diào)用go的代碼
npm run serve //這個(gè)要進(jìn)入前端的項(xiàng)目,然后運(yùn)行
然后瀏覽器訪問http://localhost:8080
框架的重點(diǎn)介紹
js如何和go進(jìn)行通信呢橄务,wails提供了一個(gè)網(wǎng)橋幔托,這個(gè)咱們不研究,我們只管如何使用我們先定義個(gè)結(jié)構(gòu)體蜂挪,并需要來一個(gè)初始化的方法重挑,然后在main.go中綁定結(jié)構(gòu)體的方法。
js中的怎么調(diào)用呢
window.backend.UserBind.CheckLogin()
//UserBind就是初始化的結(jié)構(gòu)體名稱
//CheckLogin 就是結(jié)構(gòu)體下的具體方法
//then中是結(jié)構(gòu)體中返回的數(shù)據(jù)
選擇文件棠涮,需要通過 *wails.Runtime 來調(diào)用谬哀。下面是我的一個(gè)案例。
js中調(diào)用選擇文件的方法