• Go 语言基础(四) 之 包


    1、包是函数和数据的集合。用 package 保留字定义一个包。文件名不需要与包名 一致。
    包名的约定是使用小写字符。Go 包可以由多个文件组成,但是使用相 同的 package <name> 这一行。
     
    让我们在文件 even.go 中定义一个叫做 even 的包。
    package even ← 开始自定义的包
    func Even(i int) bool { ← 可导出函数
    return i % 2 == 0
    }
    func odd(i int) bool { ← 私有函数
    return i % 2 == 1
    }
     
    名称以大写字母起始的是可导出的,
    可以在包的外部调用,稍候会讨论这个。
    现在只需要构建这个包。
    在 $GOPATH 下建立一个目录,
    复制 even.go 到这个目录。
    % mkdir $GOPATH/src/even ← 建立一个 级目录
    % cp even.go $GOPATH/src/even ← 复制包文件
    % go build ← 构建它
    % go install ← 将其安装到 ~../pkg
     
     
    接下来在程序 myeven.go 中使用这个包:
    package main
    import( // 导入下面的包;
    "even" // 本地包 even 在这里导入;
    "fmt" // 调用 even 包中的函数。
    )
    func main(){
    i := 5
    //访问一个包中的函数的语法是 <package>.Function ()。
    fmt.Printf("Is%deven?%v ",i,even.Even(i))
    }
     
    % go build myeven.go
    % ./myeven
    Is 5 even? false
     
    在 Go 中,当函数的首字母大写的时候,函数会被从包中导出(在包外部可见,或者说公有的),
    因此函数名是 Even。如果修改 myeven.go 的第even.Even,
    使用未导出的函数 even.odd:
    fmt.Printf("Is %d even? %v ", i, even.odd(i))
    由于使用了私有的函数,会得到一个编译错误:
    myeven.go:10: cannot refer to unexported name even.odd
     
    概括来说:
    • 公有函数的名字以大写字母开头;
    • 私有函数的名字以小写字母开头。
    这个规则同样适用于定义在包中的其他名字(新类型、全局变量)。
    注意,“大 写” 的含义并不仅限于 US ASCII,它被扩展到了整个 Unicode 范围。
    所以大写的 希腊语、古埃及语都是可以的。
     
     
    2、包名
    包名是好的、短的、简洁的、好记的。
    根据规则,包名是小写的一个单词;不应当有下划线或混合大小写。
    由于每个人都可能需要录入这个名字,所以尽可能的简短。不要提前考虑冲突
    包名是导入的默认名称,可以给包重命名eg,
    import bar "bytes" // 重命名为 bar
    另一个规则是包名就是代码的根目录名;在 src/pkg/compress/gzip 的包,
    作为 compress/gzip 导入,但名字是 gzip,不是 compress_gzip 也不是 compressGzip。
     
    3、测试包
    在 Go 中为包编写单元测试应当是一种习惯。编写测试需要包含 testing 包和
    程序 go test。两者都有良好的文档。
     
    4、常用的包
    标准的 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 包执行外部命令。
  • 相关阅读:
    C#-获取磁盘,cpu,内存信息
    C#-WiFi共享
    C#-WiFi共享
    C#-DES加解密
    C#-DES加解密
    C#-播放器相关
    C#-播放器相关
    Windowsw核心编程 第13章 Windows内存结构
    Windowsw核心编程 第13章 Windows内存结构
    C#-CHTTPDownload
  • 原文地址:https://www.cnblogs.com/wjq310/p/6545486.html
Copyright © 2020-2023  润新知