Go语言学习笔记---包

Mervyn1205 · · 1757 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

import导入包
1、相对路径
    例:import “./model” //当前文件同一目录的model目录,但是不建议这种方式来import
2、绝对路径
    例:import “shorturl/model” //加载gopath/src/shorturl/model模块
3、点操作
    例:
    package main
    import . "fmt"
    func main(){
        dd := 101
        Printf("%d", dd) //因为上面用的点操作导入的包,所以现在就不需要前面加包名,即 fmt.Printf()
    }
    输出结果:
    101
4、别名操作
    例:
    package main
    import f "fmt"
    func main(){
        dd := 101
        f.Printf("%d", dd) //因为上面将fmt包起了个别名f,用fmt.Printf()就会报错
    }
5、 _操作
    例:
    import(
        "database/sql"
        _ "github.com/ziutek/mymysql/godrv"
    )
_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数

定义个even包
例:even.go
    package even              // 开始自定义的包
    func Even(i int) bool {   // 可导出函数(函数名首字母大写)
        return i % 2 == 0
    }
    func odd(i int) bool {    // 私有函数(函数名首字母小写)
        return i % 2 == 1
    }

cd ~
vi .bashrc
在最后加入 export GOPATH=$HOME/g 保存退出 GOPATH的路径可自己定义
source .bashrc     //使刚配置的GOPATH生效
mkdir -p $GOPATH/src/even
将上述的even.go文件放入$GOPATH/src/even 
注意: 文件夹even的名字要和even.go文件中package <name>中name的名字相同。even.go文件名可以随意

包的函数命名方式:
    公有函数的名字以大写字母开头;
    私有函数的名字以小写字幕开头。

在myeven.go文件中使用定义的even包
例:myeven.go
    package main
    import (
        "fmt"
        "even"
    )
    func main(){
        i := 5
        fmt.Printf("Is %d even? %v\n", i , even.Even(i))
    }
输出结果:
Is 5 even? false

包测试
在包放置的目录下(如 $GOPATH/src/even)建立一个*_test.go文件

func (t *T) Fail()
Fail 标记测试函数失败,但仍然继续执行。

func (t *T) FailNow()
FailNow 标记测试函数失败,并且中断其执行。这将会执行下一个测试。因此,当前文件的其他所有测试都被跳过。

func (t *T) Log(args ...interface{})
Log 用默认格式对其参数进行格式化,与Print() 类似,并且记录文本到错误日志。

func (t *T) Fatal(args ...interface{})
Fatal 等价于Log() 后跟随FailNow()。
将这些凑到一起,就可以编写测试了。首先,选择名字even_test.go。然后添加下面的内容:

package even
import "testing"
func TestEven(t *testing.T) {
    if ! Even(2) {
        t.Log("2 should be even!")
        t.Fail()
    }
}

注意在第一行使用了package even,测试使用与被测试的包使用相同的名字空间
在包目录中执行 go test 即可

ok even 0.001s

测试执行并且报告ok。成功了!

常用的包
标准的Go 代码库中包含了大量的包,在$GOROOT/src/pkg目录中

1、fmt包
包fmt 实现了格式化的I/O 函数,这与C 的printf 和scanf 类似。格式化短语派生于C 。一些短语(%-序列)如这样使用:
%v
默认格式的值。当打印结构时,加号(%+v)会增加字段名;
%#v
Go 样式的值表达;
%T
带有类型的Go 样式的值表达;返回变量的类型

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

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

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

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

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

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

8、flag
flag 包实现了命令行解析。

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

10、text/template
数据驱动的模板,用于生成文本输出,例如HTML。
将模板关联到某个数据结构上进行解析。模板内容指向数据结构的元素(通常结构的字段或者map 的键)控制解析并且决定某个值会被显示。模板扫描结构以便解析,而“游标” @ 决定了当前位置在结构中的值。

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

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

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

14、os/exec
os/exec 包执行外部命令。






有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:Mervyn1205

查看原文:Go语言学习笔记---包

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1757 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传