9.1 标准库概述

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

在贯穿本书的例子和练习中,我们都是用标准库的包。可以通过查阅第 350 页包中的内容快速找到相关的包的实例。这里我们只是按功能进行分组来介绍这些包的简单用途,我们不会深入讨论他们的内部结构。

通过一个 Go 程序让Linux重启来体现它的能力。

示例 9.1 reboot.go

package main
import (
    "syscall"
)

const LINUX_REBOOT_MAGIC1 uintptr = 0xfee1dead
const LINUX_REBOOT_MAGIC2 uintptr = 672274793
const LINUX_REBOOT_CMD_RESTART uintptr = 0x1234567

func main() {
    syscall.Syscall(syscall.SYS_REBOOT,
        LINUX_REBOOT_MAGIC1,
        LINUX_REBOOT_MAGIC2,
        LINUX_REBOOT_CMD_RESTART)
}

下面代码演示了如何遍历一个链表(当 l 是 *List):

for e := l.Front(); e != nil; e = e.Next() {
    //do something with e.Value
}

exp 包中有许多将被编译为新包的实验性的包。在下次稳定版本发布的时候,它们将成为独立的包。如果前一个版本已经存在了,它们将被作为过时的包被回收。然而 Go1.0 发布的时候并没有包含过时或者实验性的包。

练习 9.1 Q20_linked_list.go

使用 container/list 包实现一个双向链表,将 101102103 放入其中并打印出来。

练习 9.2 size_int.go

通过使用 unsafe 包中的方法来测试你电脑上一个整型变量占用多少个字节。

链接