博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用包和测试
阅读量:7077 次
发布时间:2019-06-28

本文共 2167 字,大约阅读时间需要 7 分钟。

Go天生就是为了支持良好的项目管理体验而设计的

1、包,go项目和文件名没有关系,和src下目录结构有关

go使用包来管理接口、结构体、方法和变量

包名一般和文件目录名相同,如果不同,构建、安装会以代码包名为准,但是生成的构建文件是以目录名命名的。

一个目录下不能有不同包名的代码文件

下面通过案例介绍

1)、go项目结构通常如下:

我本地GOPATH路径为F:\goLangStudy\demo,已经设置了环境变量。

bin中是编译后的可执行文件

pkg中是编译后的包文件

src中是源码目录

其中bin和pkg文件夹如果没有,go会自动创建

2)、在src文件夹下创建文件结构如下

3)、math.go和math_pkg.go文件使用同一个包,最终会被编译到一个二进制包文件math.a中;此处可说明文件名可以和包名不一样

 math_pkg.go文件如下:

package mathfunc Add(a, b int) int {    return a + b}func Substract(a, b int) int {    return a - b}

math.go文件如下:

package mathfunc Multiply(a, b int) int {    return a * b}func Divide(a, b int) int {    if b == 0 {        panic("Can not divided by zero")    }    return a / b}

4)、一个项目只能有一个main包,main包相对src的目录结构就对应执行go install main包目录

main.go文件如下(import中math是net.duokr/math源码包别名):

package mainimport (    "fmt"    math "net.duokr/math")func main() {    var a = 100    var b = 200    fmt.Println("Add demo:", math.Add(a, b))    fmt.Println("Substract demo:",math.Substract(a,b))    fmt.Println("Multiply demo:",math.Multiply(a,b))    fmt.Println("Divide demo:",math.Divide(a,b))}

5)、编写一个脚本文件,省的每次去执行多行同样的命令,build.bat文件如下(我本地配置了环境变量,就把设置GOPATH那段注释了):

@echo offrem set GOPATH=GOPATH;F:\goLangStudy\demoset GOBIN=F:\goLangStudy\demo\bingo build net.duokr\mathgo build main.gogo install main

在src文件夹下,执行完脚本后,目录结构如下(src文件夹下会有个main.exe,是由go build main.go生成):

可以通过go run命令执行main.go;也可以直接运行bin下的bin.exe,查看结果

 2、src下的main文件夹不是必须的,main包的文件名也不一定叫main.go,下面更改后如下

 3、测试代码编写

在math文件夹下创建math_test.go文件,编写测试代码,在当前测试文件所在路径下执行go test命令,会自动执行以_test.go结尾的文件中Test开头的函数,并且测试函数参数为

*testing.T类型

math_test.go代码如下

package mathimport(    "testing"    "fmt")func TestAdd(t *testing.T){    var a=100    var b=200    var val=Add(a,b)    if val!=a+b{        t.Error("Test Case [","TestAdd","] Failed")    }else{        fmt.Println("Add Method Pass")    }}func TestSub(t *testing.T){    var a=100    var b=200    var val=Substract(a,b)    if val!=a-b{        t.Error("Test Case [","TestAdd","] Failed")    }else{        fmt.Println("Substract Method Pass")    }}func TestDemo(t *testing.T){    fmt.Println("测试代码")}func testDemo(t *testing.T){    fmt.Println("不是测试代码")}func TessDemo(t *testing.T){    fmt.Println("不是测试代码")}

 

 

 

转载地址:http://nscml.baihongyu.com/

你可能感兴趣的文章
php正则及常用正则函数怎么用
查看>>
备份-泛函编程(23)-泛函数据类型-Monad
查看>>
Nancy Web框架 文档
查看>>
Can't locate find.pl in @INC (@INC contains: /etc/perl xxxx) at perlpath.pl line 7.
查看>>
c#(.Net)解析xml
查看>>
调整Virtual Box硬盘大小
查看>>
阻塞和非阻塞,同步和异步 总结【转】
查看>>
DataTables 全局设置中文语言
查看>>
Git 目录
查看>>
RabbitMQ系列(四)RabbitMQ事务和Confirm发送方消息确认——深入解读
查看>>
深入理解 Spring 事务原理
查看>>
C语言动态链表数据结构实现的学生信息项目
查看>>
Mac定时关机、重启、休眠命令行
查看>>
基于Kafka的服务端用户行为日志采集
查看>>
逆向工程思路
查看>>
WPF 仪表盘 刻度盘 动态 加载中 开源
查看>>
高阶函数与接口混入和java匿名类
查看>>
element-ui 源码架构
查看>>
Windows linux子系统 使用说明
查看>>
Java并发编程:用AQS写一把可重入锁
查看>>