Go 入门指南(The way to Go)l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的 目标结果。 可用的编译器标记如下: flags: -I 针对包的目录搜索 -d 打印声明信息 -e 不限制错误打印的个数 -f 打印栈结构 com/hg/。 注意事项 在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安 装。你并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。 你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。 通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。 2.5 在 Windows 的示例 /os_arch :包含标准库的包的对象文件( .a ) /src :包含源代码构建脚本和标准库的包的完整源代码(Go 是一门开源语言) /src/cmd :包含 Go 和 C 的编译器和命令行脚本 2.7 Go 运行时(runtime) 尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)接口与动态类型 11.13 总结:Go 中的面向对象 11.14 结构体、集合和高阶函数 第12章:读写数据 12.1 读取用户的输入 12.2 文件读写 12.3 文件拷贝 12.4 从命令行读取参数 12.5 用 buffer 读取文件 - 4 - 本文档使用 书栈(BookStack.CN) 构建 12.6 用切片读写文件 12.7 用 defer 关闭文件 12.8 使用接口的实际例子:fmt l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结 果。 可用的编译器标记如下: 1. flags: 2. -I 针对包的目录搜索 3. -d 打印声明信息 4. -e com/hg/。 注意事项 在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安装。你 并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。 你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。 通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。 2.4 在 Mac0 码力 | 466 页 | 4.44 MB | 1 年前3
Go Web编程Sqrt(2) = 1.414213562373095 `` 如何安装该应用,进入该目录执 行go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行 mathapp 也是输出如下内容 Hello, world. Sqrt(2) = 1.414213562373095 获取远程包 获取远程包 go语言有一个获取远程包的工具就是go links 目录 上一节: GO安装 下一节: GO 命令 14 1.3 Go 命令 1.3 Go 命令 Go 命令 Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们: 图1.3 Go命令显示详细的信息 这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。 go build go build 这个命 如果是http包,那么执行go doc net/http 查看某一个包里面的函数,那么执行godoc fmt Printf 也可以查看相应的代码,执行godoc -src fmt Printf 通过命令在命令行执行 godoc -http=:端口号 比如godoc -http=:8080。然后在浏览器中打开 127.0.0.1:8080,你将会看到一个golang.org的本地copy版本,通过它你可以查询pkg文档等其它内容。如果你设0 码力 | 295 页 | 5.91 MB | 1 年前3
Hello 算法 1.0.0b1 Golang版写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 A 比算法 B 运行时间更短;但换到另一台配置不同的计算机中,可能会得到相反的测试结果。这意味着我们需要在各种机 器上展开测试,而这是不现实的。 展开完整测试非常耗费资源。随着输入数据量的大小变化,算法会呈现出不同的效率表现。比如,有可能输入 数据量较小时,算法 A 运行时间短于算法 B ,而在输入数据量较大时,测试结果截然相反。因此,若想要达 到具有说服力的对比结果,那么需要输入各种体 如果遇到看不懂的地方无需担心, 可以在学习完后面章节后再来复习,现阶段先聚焦在理解时间复杂度含义和推算方法上。 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 对于以下算法,无论操作数量 size 有多大,只要与数据大小 ? 无关,时间复杂度就仍为 ?(1) 。 // === File: time_complexity.go === /* 常数阶0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 A 比算法 B 运行时间更短;但换到另一台配置不同的计算机中,可能会得到相反的测试结果。这意味着我们需要在各种机 器上展开测试,而这是不现实的。 展开完整测试非常耗费资源。随着输入数据量的大小变化,算法会呈现出不同的效率表现。比如,有可能输入 数据量较小时,算法 A 运行时间短于算法 B ,而在输入数据量较大时,测试结果截然相反。因此,若想要达 到具有说服力的对比结果,那么需要输入各种体 如果遇到看不懂的地方无需担心, 可以在学习完后面章节后再来复习,现阶段先聚焦在理解时间复杂度含义和推算方法上。 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 对于以下算法,无论操作数量 size 有多大,只要与数据大小 ? 无关,时间复杂度就仍为 ?(1) 。 // === File: time_complexity.go === /* 常数阶0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版A 的运行时 间比算法 B 短;但在另一台配置不同的计算机中,我们可能得到相反的测试结果。这意味着我们需要在各种 机器上进行测试,而这是不现实的。 展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,输入数据量较小时, 算法 A 的运行时间可能短于算法 B;而输入数据量较大时,测试结果可能相反。因此,为了得到有说服力的 结论,我们需要测试各种规模的输入数据,这样需要占用大量的计算资源。 到不理解的部分,请不要担 心,可以在学习完后面章节后再回顾。现阶段,请先专注于理解时间复杂度的含义和推算方法。 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 对于以下算法,尽管操作数量 size 可能很大,但由于其与数据大小 ? 无关,因此时间复杂度仍为 ?(1) 。 2. 复杂度 hello‑algo.com 20 // === File: 对于密码学的相关应用,哈希算法需要满足更高的安全标准,以防止从哈希值推导出原始密码等逆向工程, 包括: ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 ‧ 雪崩效应:输入的微小变化应当导致输出的显著且不可预测的变化。 请注意,“均匀分布”与“抗碰撞性”是两个独立的概念,满足均匀分布不一定满足抗碰撞性。例如,在随机 输入 key 下,哈希函数 key % 100 可以产生均匀分布的输出。然而该哈希算法过于简单,所有后两位相等的0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.1.0 Go版时间比算法 B 短;但在另一台配置不同的计算机中,可能得到相反的测试结果。这意味着我们需要在各种机 器上进行测试,统计平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 短;而在输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 < 阶乘阶 第 2 章 复杂度分析 hello‑algo.com 33 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.go === 基于链表可实现:栈、队列、哈希表、树、堆、图等。 链表在初始化后,仍可以在程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后 长度不可变,因此也称“静态数据结构”。值得注意的是,数组可通过重新分配内存实现长度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版时间比算法 B 短;但在另一台配置不同的计算机中,可能得到相反的测试结果。这意味着我们需要在各种机 器上进行测试,统计平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 短;而在输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 < 阶乘阶 第 2 章 复杂度分析 hello‑algo.com 33 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.go === chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 6‑5 展示了一个链式地址哈希表的 例子。 图 6‑5 链式地址哈希表 基于链式地址实现的哈希表的操作方法发生了以下变化。 ‧ 查询元素:输入 key ,经过哈希函数得到桶索引,即可访问链表头节点,然后遍历链表并对比 key 以查 找目标键值对。 ‧ 添加元素:首先通过哈希函数访问链表头节点,然后将节点(键值对)添加到链表中。0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版运行时间比算法 B 短;但在另一台配置不同的计算机中,我们可能得到相反的测试结果。这意味着我们需要 在各种机器上进行测试,统计平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 更少;而输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 < 阶乘阶 第 2 章 复杂度分析 hello‑algo.com 31 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.go === 存储在同一链表中。图 6‑5 展示了一个链式地址哈希表的 例子。 图 6‑5 链式地址哈希表 第 6 章 哈希表 hello‑algo.com 114 哈希表在链式地址下的操作方法发生了一些变化。 ‧ 查询元素:输入 key ,经过哈希函数得到数组索引,即可访问链表头节点,然后遍历链表并对比 key 以 查找目标键值对。 ‧ 添加元素:先通过哈希函数访问链表头节点,然后将节点(即键值对)添加到链表中。0 码力 | 379 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版现就会更好。也 就是说,算法在不同的机器上的测试结果可能是不一致的。这意味着我们需要在各种机器上进行测试,统计 平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 短;而在输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 阶乘阶 第 2 章 复杂度分析 www.hello‑algo.com 33 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.go === 基于链表可实现:栈、队列、哈希表、树、堆、图等。 链表在初始化后,仍可以在程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后 长度不可变,因此也称“静态数据结构”。值得注意的是,数组可通过重新分配内存实现长度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D0 码力 | 384 页 | 18.49 MB | 10 月前3
共 31 条
- 1
- 2
- 3
- 4













