Go 中的包


Go 中的包

go语言的包 其实就是我们计算机里的目录,或者叫文件夹,通过它们进行目录结构和文件组织


1 包的命名

go语言的包的命名,遵循简洁小写和go文件所在目录同名的原则,这样就便于我们引用,书写以及快速定位查找。

 D:\go\src\xxxx\包名 (from $GOROOT)
 D:\goprojects\xxx\包名 (from $GOPATH)

对于自己或者公司开发的程序而言,我们一般采用域名作为顶级包名的方式,这样就不用担心和其他开发者包名重复的问题了,以自己定义的名字作为全路径中的最顶层部分


2 main包

在go语言里,同时要满足 main包 和 包含main()函数,才会被编译成一个可执行文件。

当把一个go文件的包名声明为main时,就等于告诉go编译程序,我这个是一个可执行的程序,那么go编译程序就会尝试把它编译为一个二进制的可执行文件。

一个main的包,一定会包含一个main()函数,这种我们也不陌生,比如C和Java都有main()函数,它是一个程序的入口,没这个函数,程序就无法执行。


3 导入包

import关键字来导入一个包,这个关键字告诉Go编译器到磁盘的哪里去找要想导入的包,所以导入的包必须是一个全路径的包,也就是包所在的位置。


      import "fmt"
        
        import (
        "fmt"
        "time"
        )

包的查找,是有优先级的

编译器会 优先在GOROOT里搜索,其次是GOPATH,一旦找到,就会马上停止搜索。如果最终都没找到,就报编译异常了。

远程包导入

improt  "xxxxgithub.com/A/B"

前提必须是该包 托管在一个 分布式的版本控制系统上,比如Github、Bitbucket等,并且是 Public的权限,可以让我们直接访问它们。

编译在导入它们的时候,会先在GOPATH下搜索这个包,如果没有找到,就会使用 go get 工具从版本控制系统(GitHub)获取,并且会把获取到的 源代码存储在GOPATH目录下对应URL的目录里,以供编译使用。

go get 工具 可以递归获取依赖包,如果github.com/spf13/cobra也引用了其他的远程包,该工具可以一并下载下来。

包导入的重命名

在使用import关键字导入包之后,我们就可以在代码中通过包名使用该包下相应的函数、接口等,Go语言可以让我们对导入的包重新命名,这就是命名导入


        import (
        "fmt"
        myfmt "mylib/fmt"      // 重新命名
        )

导入不使用的包

Go语言规定,导入的包必须要使用,否则会包编译错误

    ==>>  import (
    _  "fmt"                //  用空白标志符号   这样包就不能再使用了
    )

4 包的init函数

Go语言为了统一关于数据库的访问,使用databases/sql抽象了一层数据库的操作,可以满足我们操作MYSQL、Postgre等数据库, 这样不管我们使用这些数据库的哪个驱动,编码操作都是一样的,想换驱动的时候,就可以直接换掉,而不用修改具体的代码。



    package mysql
    
    import (
        "database/sql"
    )
    
    func init() {      		//	  实现mysql连接的初始化操作
        sql.Register("mysql", &MySQLDriver{}) 
    }
    
    
    import  "database/sql"
    import   _    "xxx / xxx / mysql"              //     只是想执行这个mysql包的init方法,并不想使用这个包,所以我们在导入这个包	的时候,  需要使用_重命名包名,避免编译错误。
    
    
    剩下针对的数据库的操作都是使用的database/sql标准接口如果我们想换一个mysql的驱动的话只需要换个导入就可以了灵活方便这也是面向接口编程的便利




Buy me a 肥仔水!