简单的图形界面
首先,go是没有自己的图形开发库的,所以不能直接开发图形界面,必须要借助第三方图形开发库。目前,比较常用的有:Walk,其他的还有待发掘^ _ ^
Walk安装
walk官网
在安装好go以后,在命令行或者Git Bash执行以下命令进行walk的安装
go get github.com/lxn/walk
在图形界面开发过程中,肯定会需要很多自己添加的图片等等,所以为了最终的go应用程序更加简洁,我们需要一个打包图片等资源的工具:rsrc,同样安装命令如下:
go get github.com/akavel/rsrc
第一个Walk程序
哇!虽然这是一个很简单的程序,但是过程真的有点折磨人,不过幸好网上资料也多。我们首先看程序和效果吧。
/*定义包名称main:每个源文件非注释行的第一行必须指明这个文件属于哪个包;且每个go应用程序都包含一个名为main的包*/
package main
/*引入包:这个包包含了后面程序要用的函数或其他元素*/
import (
. "github.com/lxn/walk/declarative"
)
/*定义main函数:使用func关键词定义函数*/
func main(){
FirsrWindow.Run()
}
var LableHello=Label{
Text:"Mylover Tang wei",
MinSize:Size{100, 100},
}
var widget = []Widget{
LableHello,
}
var FirsrWindow = MainWindow{
Title:"Hello",
MinSize:Size{200, 200},
Layout:VBox{},
Children:widget,
}
效果图:
在编译这个程序的时候出现了以下的问题:提示$GOPATH/go/src/golang.org/x这个路径下面的东西不存在,如下:
好吧,不存在就创建就好了,一般go文件的根目录是: C:\Users\ww\go
gitbash操作步骤:
1、cd C:\Users\ww\go\src
2、mkdir golang
3、cd golang
4、mkdir x
5、cd x
6、git clone https://github.com/golang/sys.git
7、go install golang.org/x/sys/...
8、git clone https://github.com/golang/net.git
9、git clone https://github.com/golang/text.git
10、go install golang.org/x/crypto/...
最后看看在C:\Users\ww\go\pkg\windows_amd64\golang.org\x路径下面是否有crypto和sys两个文件夹。但是新的问题出现了:
又说win下面应该存在的文件没有。~ _ ~
好吧,没有还是继续给它添上就好了。
Gitbash操作步骤:
1、到win的上一级目录lxn文件夹下,执行
go get github.com/lxn/win
2、检查win下面是否有很多go文件
再次编译,编译成功
!!可是编译成功以后,发现不能运行诶!!原来因为Walk这个图形库必须要依赖manifest才能正常运行。所以我们现在还需要使用rsrc来为可执行文件打包manifest文件。
步骤:
1、创建hello.exe.manifest文件,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
</windowsSettings>
</application>
</assembly>
2、rsrc -manifest hello.exe.manifest -o rsrc.syso
3、重新编译:go build hello.exe
4、运行成功
导入包方式
规则:
1、自定义的每个go文件要在第一行使用package关键字指明自己是属于哪个包(文件夹),原则上包名应该和文件夹同名。
2、每个包(文件夹)可以包含多个go文件
3、同一个文件夹下面所有的go文件应该指定相同的包名
4、当使用import引入某个包时,默认引入该文件夹下面所有文件
语法:
import(
"fmt"
)
常用的引入包的方式中除了有绝对路径和相对路径之分,还有以下三种导入方式:
1、点操作:比如 import(. "fmt")。这个点的含义就是,在使用fmt包中的函数时,可以省略前缀包名。
即:fmt.Println("hello") = Println("hello")
2、别名操作:比如 import(f"fmt")。可以这样把包名命名成另一个简单易记得名字。
即:fmt.Println("hello") = f.Println("hello")
3、_操作: 比如import(_"github.com/ziutek/mymysql/godrv")。当我们导入一个包时,相当于导入了它所有的go文件,但是有的时候我们并非真的需要使用这些包,仅仅是希望它的init函数被执行,那么这时就可以使用这样的方式。
var关键字
在go语言中有两种定义变量的方式:
1、“:=”
比如: value := "hello"。
(1) 这时声明了一个value变量并且赋初值为“hello”;
(2) ":="方式可以自动识别变量类型
(3) 该方式不可以用来声明全局变量
2、var关键字
(1) 定义变量
指定变量类型,比如:var value int,未赋初值时,初始值为系统默认值。init是0,bool为false。
根据值自行判定数据类型,比如:var value = 10;这时value为int类型。
(2) 声明一个函数
比如:var pr = fmt.Println
这样,就可以使用pr来代替fmt.Println。