欢迎,来自IP地址为:18.118.9.146 的朋友


Go语言可以说是编程语言的希望之星,它有着很多面向未来计算机系统的若干特性。为了对Go语言的体系结构及若干规则有所了解,本文将以一个简单的计算器程序作为示例,详细讲解Go语言编程、编译及调试等步骤,希望对大家使用Go语言有所帮助。

Go程序的体系结构

依据Go语言的规则,在Go项目文件夹里应该包含三个目录:<src>用于存放源文件;<pkg>用于存放编译后的包文件;<bin>用于存放编译后的可执行文件。习惯上,go将不同功能的程序段独立成为一个包,而源文件目录的一个文件夹就可以被Go语言视作一个包,理论上这个文件夹里的所有文件都是这个程序包的源代码。程序源代码为.go后缀的文件,可以通过go run 源代码文件直接执行,但还是建议将其编译成可执行文件再执行,因为可以了解全过程。本次示例的程序文件结构如下:

ProRoot
 |————<src>
     |————<calc>
         |——calc.go
     |————<cusmath>
         |——add.go
         |——add_test.go
         |——sqrt.go
         |——sqrt_test.go
 |————<pkg>
 |————<bin>

在项目目录ProRoot中,有三个子目录<src>、<pkg>和<bin>,在源代码目录中有两个子目录<calc>和<cusmath>。其中calc目录为main包,而cusmath为calc导入的一个自定义数学包cusmath。两个目录中分别存放了程序的源代码,在cusmath中包含了测试文件,一般测试文件为采用对应源代码加_test方式命名,Go会根据这个规则来查找对应的测试文件并进行测试。

示例程序很简单,就是实现简单的计算器,可以进行整数相加和整数的开平方。可执行文件可以接收命令参数“add”和“sqrt”,并根据参数来计算结果,出现错误则报错提示命令用法。程序本身没什么好讲的,主要说一下程序编译调试的全过程。

出于输入代码方便的考虑,我使用了PhpStorm加GO插件作为GO语言的IDE。这个IDE使用起来很方便,调试功能也很强大,推荐大家试下。

代码输入完成后,就需要进行编译和调试了。Go官方都建议使用命令行工具,所以我们下面的编译均采用命令行方式。在编译之前,要先将项目文件夹添加至GOPAHT系统环境变量,不然GO在编译的时候会出错。配置方法就是“系统属性”选项卡—>“环境变量”—>“新建”,然后新建一个GOPATH变更,并将项目文件夹的路径填入。如果配置多个GOPATH,可以把多个路径用分号隔开,再次编辑就如图所示:

环境变量配置完成后,就可以进行项目的编译了。需要注意的原则就是先编译main包的导入包,然后再编译main包,不然在生成可执行文件时要报错。在编译cusmath包时,由于存在测试文件,可以用go test命令进行包测试。cusmath包的编译步骤如下:

C:\ProRoot>go build cusmath

C:\ProRoot>go test cusmath
ok      cusmath 0.043s

C:\ProRoot>go install cusmath

上述几条命令就完成了cusmath编译和安装,成功后会在pkg目录生成主机架构文件夹,并在此文件夹中生成对应的包文件供其它程序调用,此处就是cusmath.a(由于我的主机是AMD_64架构,所以为.a后缀)。完成内容如下图所示:

main包的编译过程类似,不过可以不测试。执行完go install命令后会在bin目录生成一个与main包文件夹名相同的可执行程序。

C:\ProRoot>go build calc
C:\ProRoot>go install calc

生成可以执行文件后,如图所示:

可以看到,Go语言生成的可执行文件较其它语言要大的多,这是因为Go在编译时会将运行环境一并编译至可执行文件的结果,其好处就是编译完成后可以不需要依赖文件直接执行。

编译通过后,就可以执行程序验证结果了。顺利的话当然好,不过程序当然会有逻辑错误的。语法上的问题IDE可以帮助避免,而逻辑问题就需要查看程序执行过程,逐步调试了。这里当然是推荐使用PhpStorm的相应功能了,因为它用起来真的很方便。本示例程序调用了os.Args函数,需要在调试时有用户的输入参数项,此时,PS的debug选项里有如下设置,可以在跟踪时将命令参数引入。

可以看到,通过使用Program arguments功能,就可以在调试的时候引入用户输入参数项,从而便于查找问题。调试完成后,就可以正式生成可执行文件了,注意如果有修改的话,就需要重新编译源代码并重新生成可执行文件。程序执行的效果如下:

以上就是一个Go项目的完整过程,虽然程序简单,但很能说明问题,也有助于理解Go项目开发。这里是源代码,大家可以下载测试,希望对于GO语言有新的认识。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注