美文网首页
Go笔记-Chap9 包结构

Go笔记-Chap9 包结构

作者: leon4ever | 来源:发表于2019-05-10 10:51 被阅读0次

    9.1 工作空间

    • src
    • bin go install 结果
    • pkg go get 结果

    环境变量

    编译器按照GOPATH设置的路径搜索目标,比当前工作空间优先级更高
    GOROOT指示工具链和标准库的存放位置
    GOBIN,强制代替工作空间的bin目录,作为go install目标保存路径,可避免将所有工作空间的bin路径添加到PATH环境变量中

    9.2 导入包

    import导入,参数是工作空间中以src为起始的绝对路径。
    搜索顺序:标准库,GOPATH列表

    import导入的是路径,而非包名,只不过包名通常和目录一致。在代码中引用时,则用包名

    四种导入方式

    • 简便方式:import . "github.com/qyuhen/test", 不推荐!
    • 初始化:import _ "github.com/qyuhen/test",仅为了让目标包的初始化函数得以执行

    9.3 组织结构

    包package由多个保存在同一目录下的源码文件组成,类似名字空间,是成员作用域和访问权限的边界。
    统一目录下所有源码文件必须使用相同包名称。因导入时使用绝对路径,所以包必须有唯一路径
    保留特殊含义的包:

    • main
    • all
    • std, cmd
    • documentation

    权限

    所有成员在包内均可访问,但只有首字母大写的为可导出成员,在包外可视。

    初始化

    包内每个源码文件都可定义一到多个初始化函数,但编译器不保证执行次序
    原理是编译器自动生成一个包装函数进行调用,保证单一线程仅执行一次。

    1. 全局变量初始化
    2. 执行初始化函数
    3. main.main入口函数

    内部包

    内部包机制相当于新的访问权限控制:所有保存在internal目录下的包仅能被其父目录下的包(含所有层次的子目录)访问

    9.4 依赖管理

    vendor,将源码和依赖完整打包分发。

    vendor比标准库优先级更高
    导入vendor的第三方包,参数是以vendor为起点的绝对路径

    问题:当多个vendor目录嵌套时,如何查找?(第三方包也有vendor)

    • 从当前源文件所在目录开始,逐级向上构造vendor全路径,知道发现路径匹配的目标为止。匹配失败,则依旧搜索GOPATH

    相关文章

      网友评论

          本文标题:Go笔记-Chap9 包结构

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