Go+Wails学习笔记(⼀)环境搭建与配置
前⾔
Go,⼜称Golang,是⾕歌在21世纪开发的⼀种新的编程语⾔,它静态强类型、从语⾔层⾯⽀持并发(Goroutine)、⽀持垃圾回收GC。
Go语⾔有⼀些笔者很喜欢的特点,譬如跨平台、交叉编译(在某个环境中编译其他平台的程序)、⽀持并发、语⾔上做“减法”精简关键字、直接静态编译成单个⼆进制可执⾏⽂件(告别缺少vcruntime.dll的痛苦)。
Go语⾔像是C++和python的融合,存在着Go语⾔开发者的⼀些“固执”,⽐如花括号{}的换⾏,也有⼀些缺陷。Go适合写服务器的后端应⽤,但是⽤来写带有GUI的应⽤程序还不是那么成熟,官⽅原⽣不⽀持,故有许多相关GUI库,如:Qt、ui、walk、gio、go-flutter-desktp。经过若⼲⽐较之后笔者认为使⽤Go+wails的⽅式是⼤势所趋。
Wails的思路是使⽤Web端的技术(html/css/js)作为前端,可以使⽤js框架如vue和react,后端使⽤Go语⾔,前后端交互通过go与js绑定某种⽅法实现,如此前端便可使⽤各种成熟的框架,似乎学习web端的技术、Go语⾔、另⼀个⽹页后端的Go语⾔框架(如Gin)即可打通全栈,想法是好,但是还得⼀步步学习。
Wails 和 electron 不同,electron是把chromium浏览器内核打包,包括ffmpeg.dll等,体积上⾮常臃肿,⾸次启动慢,所占存储空间和内存都偏⼤,和笔者体积较⼩、功能齐全的理念相悖。wails则是直接调⽤系统⾃带浏览器内核,⾄于内存...有待验证。
经过测试,wails的体积10.2MB、zip压缩包4.3MB、7z压缩3.5MB、UPX压缩后3.93MB,内存占⽤43.7MB。
接下来笔者会把整个学习的过程记录下来,⽬前只有wails的官⽹可以提供较好的⽂档,其中也会涉及纯Golang的知识点,因为笔者也在Go语⾔学习初期。
环境搭建
折腾了很久,最后决定在虚拟机中使⽤Win10企业版LTS搭建Go+wails的环境,装MacOS出现了兼容问题,linux中也有⼀些难处、需要⼤量的时间深⼊了解linux,故当下选择win10。
有钱了也组台⿊苹果吧,windows最⼤的问题是它不够优雅。
安装Go
下载对应安装包并安装。下载地址
安装Node
下载安装,如此便有了npm。下载地址
再⽤如下命令安装cnpm,国内使⽤的速度提升很⼤。
如有其它web端的依赖请⾃⾏安装。
安装GCC库
Windows下需要安装GCC库⽤来编译。下载地址
安装Git Bash
可能会⽤到Git操作Push/Clone,建议安装。下载地址
安装Docker
官⽅⽂档似乎提到Docker在wails交叉编译时会⽤到。下载地址
安装IDE
这⾥推荐两个IDE/编辑器:微软的VSCode 和 jetbrains的Goland。
各有优劣,这⾥笔者⽤的是Goland,学⽣使⽤教育邮箱可⽩嫖,开源项⽬也可申请。
IDE的配置略过,注意VSCode可以安装sync插件,把所有配置同步到github gist上,之后到任意机器上安装sync插件粘贴⼀串代码、登录github即可同步所有插件设置。
设置Goproxy
按照Goproxy官⽹的说明设置代理:
其他(⾮必须)
笔者做了⼀些美化⼯作,包括安装 Mactype、安装Sarasa字体和Firacode字体、使⽤NoMeiryoUI更改全局字体为10pt Sarasa SC,使⽤百分浏览器并关闭DW,这样字体终于能看了。
Go语⾔项⽬⽂件结构
GOPATH下共有三个⽂件夹:bin、pkg、src
bin存放编译好的程序
pkg存放编译后⽣成的各种⽂件和各种包(代码中import的外部包)
src存放源代码
⼀般需要配置GOROOT、GOPATH、GOBIN的环境变量,不过⽤Goland似乎可以懒⼀点,因为是虚拟机所以全默认很⽅便,src⽂件夹直接发送到桌⾯快捷⽅式。
测试纯Go语⾔
可以⽤Goland创建⼀个项⽬,⽐如命名为test,即新建src/,输⼊以下内容:
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n47" mdtype="fences"
style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px
4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">package main
import(
"fmt"
)
func main() {
fmt.Println("Hello World!")
}</pre>
在终端,位置src/test/处使⽤命令go ,编译和运⾏第⼀个Go程序。
使⽤命令go 编译得到可执⾏程序,运⾏,结果如下:
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n50" mdtype="fences"
>C:\Users\Purp1e\go\src\test&
That's Good!</pre>
运⾏第⼀个Wails程序
在终端中输⼊wails,配置⼀下名字和邮箱。
image
然后cd到src⽂件夹,使⽤wails init,有的选项可直接使⽤ENTER⼤法xd。
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n55" mdtype="fences"
>C:\Users\Purp1e\go\src>wails init
Wails v1.7.1 - Initialising project
The name of the project (My Project): tutorial
Project Name: tutorial
The output binary name (tutorial):
Output binary Name: tutorial
Project directory name (tutorial): tutorial
Project Directory: tutorial
Please select a template:
1: Angular - Angular 8 template (Requires node 10.8+)
2: React JS - Create React App v3 template
3: Vanilla - A Vanilla HTML/JS template
4: Vue2/Webpack Basic - A basic Vue2/WebPack4 template
5: Vuetify1.5/Webpack Basic - A basic Vuetify1.5/Webpack4 template
6: Vuetify2/Webpack Basic - A basic Vuetify2/Webpack4 template
Please choose an option [1]: 4
Template: Vue2/Webpack Basic
Building project (this may take a while)...
Project 'tutorial' built in directory 'tutorial'!</pre>
项⽬结构如下图:
image
其中frontend是前端的⽂件夹,中做了前后端的绑定,appicon.png是程序的图标。
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n59" mdtype="fences"
style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-
color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px
4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color:
initial;">C:\Users\Purp1e\go\src\tutorial>wails -help
其中wails build是构建项⽬并⽣成到build⽂件夹⾥,wails serve则是把项⽬运⾏在localhost中,可以热调试。
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n61" mdtype="fences"
style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px
4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color:
initial;">C:\Users\Purp1e\go\src\tutorial>wails build
Wails v1.7.1 - Building Application
Skipped frontend dependencies (-f to force rebuild)
Ensuring Dependencies are up
Packing +
Awesome! Project 'tutorial' built!
C:\Users\Purp1e\go\src\tutorial>cd build
C:\Users\Purp1e\go\src\tutorial\build&</pre>
运⾏结果如图:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论