美文网首页
理解Go语言包(package)

理解Go语言包(package)

作者: VienFu | 来源:发表于2019-11-13 15:55 被阅读0次

    1. Go语言包的概念

    Go语言使用包来组织源代码的,并实现命名空间的管理,任何一个Go语言程序必须属于一个包,即每个go程序的开头要写上package <pkg_name>

    Go语言包一般要满足如下三个条件:

    • 同一个目录下的同级的所有go文件应该属于一个包;
    • 包的名称可以跟目录不同名,不过建议同名;
    • 一个Go语言程序有且只有一个main函数,他是Go语言程序的入口函数,且必须属于main包,没有或者多于一个进行Go语言程序编译时都会报错;

    2. 包的引用

    在组织Go代码结构和引用包时,都会不可避免会涉及到一个叫做GOPATH的概念,那它究竟是什么呢?

    GOPATH是GO语言使用的一个环境变量,使用绝对路径提供项目的工作目录,适合处理大量 Go语言源码、多个包组合而成的复杂工程。实际使用中,可以先通过命令go env来查看一下当前的GOPATH值,然后再决定是不是需要重新设置。

    关于GOPATH设置,建议不要做全局设置而是跟随相应的项目设置。设置好GOPATH后,一般会先在其对应的目录下新建一个src目录,现假设在src目录下新建一个项目study01并且它的目录结构如下:

    2.1 包引用路径

    这里建议采用全路径引用,比如main.go需要调用包app的函数,那需在main.go程序写上import study01/app

    2.2 包引用格式

    Go包的引入格式常见的有四种,下面以引用fmt包为例说明:

    • 标准引用
      import fmt
    • 设置别名引用
      import format_go fmt
    • 省略方式的引用
      import . fmt,这种引用相当于把包fmt的命名空间合并到当前程序的命名空间了,因此可以直接引用,不用在加上前缀fmt.
    • 仅执行包的初始化函数
      import _ fmt

    另外,当一个Go程序需要导入多个包时,可以使用单行导入或者多行导入,如下分别列出两种导入形式:

    • 单行导入
    import "package1"
    import "package2"
    
    • 多行导入
    import (
        "package01"
        "package02"
    )
    

    另外,导入的包必须要被使用,否则程序编译时也会报错。

    3. Go包引用初始化流程

    假设一个go语言程序的引入包的顺序是:main-> 包A -> 包B ->包C,且包A、B、C均实现了init()函数,那么整个初始化流程顺序则为:C.init -> B.init -> A.init -> main-> 包A -> 包B -> 包C

    4. 包中标识符的导出

    如果一个包要引用另一个包的标识符(比如结构体、变量、常量、函数等),那么首先必须要将其导出,具体做法就是在定义这些标识符的时候保证首字母大写(首字母小写的标识符只能限制在包内引用)。另外在被导出的的结构体或者接口中,首字母大写的字段和方法才能被包外访问

    相关文章

      网友评论

          本文标题:理解Go语言包(package)

          本文链接:https://www.haomeiwen.com/subject/bkxqictx.html