Go语言学习笔记(六) [包]

日期:2014年7月30日

一、包的定义

包时函数和数据的集合。使用package关键字定义一个包,文件名不需要与包名一致,包名约定使用小写字符,Go包可以由多个文件组成,但是需要使用相同的package<name>,包中方法的调用方式:<packag>.Fuction()

现在 新建一个文件even.go,even.go的文件内容如下:

packageeven
//判断是否是偶数
funcEven(iint)bool{
returni%2==0
}
//判断是否是奇数
funcodd(iint)bool{
returni%2==1
}

里面定义了两个函数,一个是Even,一个是odd,Even首字母大写,odd首字母小写,Even函数可以在包外访问,而odd函数不可以,这是 Go语言的约定——公有函数的名字以大写字母开头,私有函数的名字以小写字母开头。这种规则同样适用于定义在包中的新类型、全局变量等,而且"大写"的含义并不仅限于US ASCII,它被扩展到了所有的大小写字母表(拉丁文、希腊文、斯拉夫 文、亚美尼亚文和埃及古文)。

构建even包:

//打印GOPATH路径,注意GOPATH路径时在GO语言环境安装的时候设定的

$ echo $GOPATH

E:\ProgramFiles\Go\Go\GoImportPkg

//在GOPATH下面新建文件夹/src/even

$ mkdir $GOPATH/src/even

//把even.go文件拷贝到新建的目录下面

$ cp even.go $GOPATH/src/even

//跳转到新建的目录

cd $GOPATH/src/even

//打印当前目录信息

$ pwd

/e/ProgramFiles/Go/Go/GoImportPkg/src/even

//编译even.go

go bulid

//安装even包

go install

执行上述步骤之后,到$GOPATH/pkg目录下可以找到一个文件even.a,用Sublime打开查看:

213c 6172 6368 3e0a 5f5f 2e53 594d 4445

4620 2020 2020 2020 3020 2020 2020 2020

2020 2020 3020 2020 2020 3020 2020 2020

3634 3420 2020 2020 3133 3620 2020 2020

2020 600a 54e0 0100 0022 222e 4576 656e

0044 e001 0000 676f 2e73 7472 696e 672e

2266 756e 6328 696e 7429 2062 6f6f 6c22

0044 e001 0000 7479 7065 2e66 756e 6328

......

使用even包:

packagemain
import(
"even"//导入我们刚才自定义的even包
"fmt"//GO内置包
)
funcmain(){
i:=5
fmt.Printf("Is%deven?%v\n",i,even.Even(i))//打印Is5even?false
//fmt.Printf("Is%deven?%v\n",even.odd(i))//报错提示cannotrefertounexportednameeven.odd
}

二、包名覆盖

Go在导入包的时候,可以通过import <othername>packagenaem方式来覆盖原始的包名,且覆盖之后只能使用新的名称来调用包中的函数。

三、包的文档

每个包都应该有包注释,在 package 前的一个注释块。对于多文件包,包注释只需要 出现在一个文件前,任意一个文件都可以。包注释应当对包进行介绍,并提供相关于包的整体信息。这会出现在 go doc 生成的关于包的页面上,并且相关的细节会一并显示。在包中每个定义(并且导出)的函数应当有一小段文字描述该函数的行为。

四、单元测试

在Go中为包编写单元测试应当是一种习惯。编写测试需要包含 testing 包和程序 go test。

测试文件也在包目录中,被命名为*_test.go,这些测试文件和其它的Go文件都是一样的,但是go test只会执行测试函数,每个测试函数都有相同的标识,名字均以Test开头,定义方式为:func TestXxx(t *testing.T)。编写测试时,需要告诉 go test 测试是失败还是成功。测试成功则直接返回。当测试失败可以用Fail()、FailNow、Log、Fatal等函数标记 。

示例:

新建一个even_test.go文件(Go中单元测试文件的名称都约定为XXX_test.go),该文件与上述even.go文件在相同的目录下,内容如下:

packageeven
import"testing"
funcTestEven(t*testing.T){
if!Even(2){
t.Log("2shouldbeeven!")
t.Fail()
}
}

使用了package even定义包,测试使用与被测试的包使用相同的名字空间,这 不仅仅是为了方便,也允许了测试未导出的函数和结构(同包下的私有函数是可以直接访问的)。

导入了testing包,定义测试函数TestEven,函数体中编写了一些测试规则。

此时:执行go test

说明测试通过。

修改even_test.go文件内容,再次执行go test

packageeven
import"testing"
funcTestEven(t*testing.T){
ifEven(2){//去掉了!
t.Log("2shouldbeeven!")
t.Fail()
}
}

由此可以来验证包中函数的语法规则是否正确。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


类型转换 1、int转string 2、string转int 3、string转float 4、用户结构类型转换
package main import s &quot;strings&quot; import &quot;fmt&quot; var p = fmt.Println func main() { p(&quot;Contains: &quot;, s.Contains(&quot;test&quo
类使用:实现一个people中有一个sayhi的方法调用功能,代码如下: 接口使用:实现上面功能,代码如下:
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件信息 4、删除文件,成功返回true,失败返回false
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http://www.golangtc.com/downloadBeego开发文档地址:http://beego.me/docs/intro/ 安装步骤: 一、GO环境安装 二、配置系统变量 三、Beego安装 一、GO环境安装 根
golang获取程序运行路径:
Golang的文档和社区资源:为什么它可以帮助开发人员快速上手?
Golang:AI 开发者的实用工具
Golang的标准库:为什么它可以大幅度提高开发效率?
Golang的部署和运维:如何将应用程序部署到生产环境中?
高性能AI开发:Golang的优势所在
本篇文章和大家了解一下go语言开发优雅得关闭协程的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1.简介本文将介绍首先为什么需要主...
这篇文章主要介绍了Go关闭goroutine协程的方法,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1.简介本文将介绍首先为什么需要主动关闭gor...
本篇文章和大家了解一下go关闭GracefulShutdown服务的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录Shutdown方法Regi...
这篇文章主要介绍了Go语言如何实现LRU算法的核心思想和实现过程,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。GO实现Redis的LRU例子常
今天小编给大家分享的是Go简单实现多租户数据库隔离的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会...
这篇“Linux系统中怎么安装NSQ的Go语言客户端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希
本文小编为大家详细介绍“怎么在Go语言中实现锁机制”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Go语言中实现锁机制”文章能帮助大家解决疑惑,下面...
今天小编给大家分享一下Go语言中interface类型怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考