go语言-包(一)

作者: 不思量q | 来源:发表于2020-03-22 11:57 被阅读0次
    1. go使用包来组织源代码,Go语言没有强制要求包名必须和其所在的目录名同名,但是建议包名和所在目录名同名,包借助了目录树的组织方式。

    2. 包的导入:包名是从GOPATH/src/后开始计算的,使用/进行路径分隔

      全路径导入:GOROOT/src后开始写

      包命名别名:import F "fmt"

      省略引用格式:import . "Fmt"引用时直接使用Println()

      匿名引用:只是希望执行包初始化的init 函数,而不使用包内部的数据时,可以使用import _ "net/http"

      包加载:在执行main包的main函数之前,go引导程序对整个程序的包进行初始化。从main函数引用的包开始,逐级查找包的引用,直到找到没有引用其他包的包,最终生成一个包引用的有向无环图。然后将图转化为一棵树,从树的叶子节点逐层向上对包进行初始化。单个包初始化时,先初始化常量,然后全局变量,最后执行init函数。

    3. 使用 export 指令可以将当前目录的值设置到环境变量 GOPATH中。

      export GOPATH=pwd

      建立gopath中的源码目录:mkdir -p src/hello

      编译和运行:go install hello

      bin目录下执行./hello

      GOPATH路径建议随项目路径设置,避免不可预知的错误

    4. 功能常用内置包

      • fmt io
      • bufio 对io包的封装,并提供了缓冲数据功能
      • sort
      • strconv 字符串和基本数据类型之间转换
      • sync 实现中锁机制和其他同步互斥机制
      • flag 命令行参数规则定义和解析
      • encoding/json 对象《=》JSON字符串间转换
      • html/template 主要实现了 web 开发中生成 html 的 template 的一些函数
      • net/http
      • ox/exec linux命令相关实现
      • reflect
      • bytes log
    5. 自定义包

      Go 编译速度快受益于以下三点:

      • 所有导入的包必须在每个文件的开头显示的声明
      • 禁止包的环状依赖,包的依赖关系会形成一个有向无环图,每个包可以独立编译,且很可能会并发编译
      • 编译后的文件不仅记录了本身的导出信息,目标文件还记录了包的依赖关系。因此在编译一个包时,不需要遍历所有引入的包,只需要读取直接导入的目标文件即可。
    6. 包中的标识符,让外部的包可以访问包的类型和值

      type MyStruct struct {
        OutPackage int // 包外可用
        innerPack string // 包内访问
      }
      type MyInterface interface {
        ExportedMethod() // 包外
        innerMethod()// 包内
      }
      

    相关文章

      网友评论

        本文标题:go语言-包(一)

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