近期学习《the way to go》这本书,觉得非常清晰和易懂,故作为读书笔记,记录一下总结。

 

一、go 程序编译

 

二、go 包和文件

  2.1 包

  • 包是结构化代码的一种方式: 每个程序都由包( 通常简称为 pkg) 的概念组成, 可以使用自身的包或者从其它包中导入内容。

  如同其它一些编程语言中的类库或命名空间的概念, 每个 Go 文件都属于且仅属于一个包。 一个包可以由许多以.go 为扩展名的源文件组成, 因此文件名和包名一般来说都是不相同的。

  • 每个go文件必须属于1个包,在源文件中非注释的第一行指明这个文件属于哪个包, 如: package main
package xxx

xxx
  • package main 表示一个可独立执行的程序, 每个 Go 应用程序都包含一个名为 main 的包。
  • main包和非main包的区别在于,main包会构建成可执行的程序,非main包会构建成模块(以.a后缀结尾)。
  • 所有的包名都应该使用小写字母。
  • 包的依赖关系决定了其构建顺序。
  • 属于同一个包的源文件必须全部被一起编译, 一个包即是编译时的一个单元, 因此根据惯例, 每个目录都只包含一个包。
  • 如果对一个包进行更改或重新编译, 所有引用了这个包的客户端程序都必须全部重新编译。

2.2 标准库

  • Go安装包里面就包含了标准库,标准库包含了大量的包( 如: fmt os) , 但是你也可以创建自己的包。

2.3 自定义包

  

三、go标准库

  • go语言的标准库,也是以包的形式进行使用。

  fmt os 等这样具有常用功能的内置包在 Go 语言中有 150 个以上, 它们被称为标准库, 大部分(一些底层的除外)内置于 Go 本身。

  查看标准库:

 

  • 常用标准库的大概功能

       os : 提供给我们一个平台无关性的操作系统功能接口, 采用类Unix设计, 隐藏了不同操作系统间差异, 让不同的文件系统和操作系统对象表现一致。

  os/exec : 提供我们运行外部操作系统命令和程序的方式。syscall : 底层的外部包, 提供了操作系统底层调用的基本接口

  syscall : 底层的外部包, 提供了操作系统底层调用的基本接口。
  archive/tar 和 /zip-compress : 压缩(解压缩)文件功能。fmt - io - bufio - path/filepath - flag :

  fmt : 提供了格式化输入输出功能。 

  io : 提供了基本输入输出功能, 大多数是围绕系统功能的封装。bufio : 缓冲输入输出功能的封装。

  path/filepath : 用来操作在当前系统中的目标文件名路径。flag : 对命令行参数的操作。

  strings - strconv - unicode - regexp - bytes :

    strings : 提供对字符串的操作。

    strconv : 提供将字符串转换为基础类型的功能。unicode : 为 unicode 型的字符串提供特殊的功能。regexp : 正则表达式功能。

    bytes : 提供对字符型分片的操作。index/suffixarray : 子字符串快速查询。

  math - math/cmath - math/big - math/rand - sort :

    math : 基本的数学函数。math/cmath : 对复数的操作。math/rand : 伪随机数生成。

    sort : 为数组排序和自定义集合。math/big : 大数的实现和计算。

  container - /list-ring-heap : 实现对集合的操作。

    list : 双链表。

    ring : 环形链表。

  time : 日期和时间的基本操作。

  log : 记录程序运行时产生的日志,我们将在后面的章节使用它。encoding/json - encoding/xml - text/template :

  encoding/json : 读取并解码和写入并编码 JSON 数据。

  encoding/xml :简单的 XML1.0 解析器,有关 JSON 和 XML 的实例请查阅第 12.9/10 章节。text/template :生成像 HTML 一样的数据与文本混合的数据驱动模板( 参见第 15.7 节) 。

  net - net/http - html :( 参见第 15 章) net : 网络数据的基本操作。

  http : 提供了一个可扩展的 HTTP 服务器和基础客户端, 解析 HTTP 请求和回复。html : HTML5 解析器。

  runtime : Go 程序运行时的交互操作, 例如垃圾回收和协程创建。

  reflect : 实现通过程序运行时反射, 让程序操作任意类型的变量

  regexp:正则表达式包

  sync:并发包,其中包含 Mutex 、RWMutex两种常用的类型。操作方法分别是Lock/Unlock,RLock.

    相对简单的情况下, 通过使用 sync 包可以解决同一时间只能一个线程访问变量或 map 类型数据的问题。 如果这种方式导致程序明显变慢或者引起其他问题, 我们要重新思考来通过 goroutines channels 来解决问题, 这是在 Go 语言中所提倡用来实现并发的技术。 

  big: 超过float64 等这些大数值计算的包

posted on 2025-03-22 22:15  七连长  阅读(42)  评论(0)    收藏  举报