37.笔记go语言——包

来源:互联网 发布:java做爬虫 编辑:程序博客网 时间:2024/06/10 09:42

37.笔记go语言——包

包是函数和数据的集合。用package保留字定义一个包。文件名不需要与包名一致。包名的约定是使用小写字符。Go包可以由多个文件组成,但是使用相同的package <name>这一行。让我们在文件even.go中定义一个叫做even的包。

名称以大写字母起始的是可导出的,可以在包的外部调用.

在Go中,当函数的首字母大写的时候,函数会被从包中导出(在包外部可见,或者说公有的)

概括来说:

•公有函数的名字以大写字母开头;

•私有函数的名字以小写字母开头。

这个规则同样适用于定义在包中的其他名字(新类型、全局变量)。注意,“大写”的含义并不仅限于US ASCII,它被扩展到了整个Unicode范围。所以大写的希腊语、古埃及语都是可以的。

标识符

像在其他语言中一样,Go的命名是很重要的。在某些情况下,它们甚至有语义上的作用:例如,在包外是否可见决定于首字母是不是大写。因此有必要花点时间讨论一下Go程序的命名规则。

包名

当包导入(通过import)时,包名成为了内容的入口。在import "bytes"之后,导入包的可以调用函数bytes.Buffer。任何使用这个包的人,可以使用同样的名字访问到它的内容,因此这样的包名是好的:短的、简洁的、好记的。

根据规则,包名是小写的一个单词;不应当有下划线或混合大小写。由于每个人都可能需要录入这个名字,所以尽可能的简短。不要提前考虑冲突。包名是导入的默认名称。

在Go中使用混合大小写MixedCaps或者mixedCaps,而不是下划线区分含有多个单词的名字。

包的文档

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

每个定义(并且导出)的函数应当有一小段文字描述该函数的行为。

测试包

在Go中为包编写单元测试应当是一种习惯。编写测试需要包含testing包和程序go test。两者都有良好的文档。

在编写包的时候应当一边写代码,一边写(一些)文档和测试函数。这可以让你的程序更好,并且它展示了你的努力。

常用的包

标准的Go代码库中包含了大量的包,并且在安装Go的时候多数会伴随一起安装。浏览$GOROOT/src/pkg目录并且查看那些包会非常有启发。

fmt

包fmt实现了格式化的I/O函数,这与C的printf和scanf类似。格式化短语派生于C。一些短语(%-序列)这样使用:

%v

默认格式的值。当打印结构时,加号(%+v)会增加字段名;

%#v

Go样式的值表达;

%T

带有类型的Go样式的值表达;

io

这个包提供了原始的I/O操作界面。它主要的任务是对os包这样的原始的I/O进行封装,增加一些其他相关,使其具有抽象功能用在公共的接口上。

bufio

这个包实现了缓冲的I/O。它封装于io.Reader和io.Writer对象,创建了另一个对象(Reader和Writer)在提供缓冲的同时实现了一些文本I/O的功能。

sort

sort包提供了对数组和用户定义集合的原始的排序功能。

strconv

strconv包提供了将字符串转换成基本数据类型,或者从基本数据类型转换为字符串的功能。

os

os包提供了与平台无关的操作系统功能接口。其设计是Unix形式的。

sync

sync包提供了基本的同步原语,例如互斥锁。

flag

flag包实现了命令行解析。

encoding/json

encoding/json包实现了编码与解码RFC 4627 [5]定义的JSON对象。

text/template

数据驱动的模板,用于生成文本输出,例如HTML。

将模板关联到某个数据结构上进行解析。模板内容指向数据结构的元素(通常结构的字段或者map的键)控制解析并且决定某个值会被显示。模板扫描结构以便解析,而“游标” @决定了当前位置在结构中的值。

net/http

net/http实现了HTTP请求、响应和URL的解析,并且提供了可扩展的HTTP服务和基本的HTTP客户端。

unsafe

unsafe包包含了Go程序中数据类型上所有不安全的操作。通常无须使用这个。

reflect

reflect包实现了运行时反射,允许程序通过抽象类型操作对象。通常用于处理静态类型interface{}的值,并且通过Typeof解析出其动态类型信息,通常会返回一个有接口类型Type的对象。

os/exec

os/exec包执行外部命令。

 

 

原创粉丝点击