Go 入门指南(The way to Go)数则会先执行该函数)。如果你的 main 包的源代码没有包含 main 函数,则会引发构建错误 undefined: main.main 。main 函数即没有参数,也没有返回类型(与 C 家族中的其它语言恰好相 反)。如果你不小心为 main 函数添加了参数或者返回类型,将会引发构建错误: func main must have no arguments and no return values results reciprocal const Billion = 1e9 // float constant const hardEight = (1 << 100) >> 97 根据上面的例子我们可以看到,反斜杠 \ 可以在常量表达式中作为多行的连接符使用。 与各种类型的数字型变量相比,你无需担心常量之间的类型转换问题,因为它们都是非常理想的数字。 不过需要注意的是,当常量赋值给一个精度过小的数字型变 该类字符串使用双引号括起来,其中的相关的转义字符将被替换,这些转义字符包括: \n :换行符 \r :回车符 \t :tab 键 \u 或 \U :Unicode 字符 \\ :反斜杠自身 非解释字符串: 该类字符串使用反引号括起来,支持换行,例如: `This is a raw string \n` 中的 `\n\` 会被原样输出。 Go入门指南 - 64 - 本文档使用 看云 构建 和0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)reciprocal 4. const Billion = 1e9 // float constant 5. const hardEight = (1 << 100) >> 97 根据上面的例子我们可以看到,反斜杠 \ 可以在常量表达式中作为多行的连接符使用。 与各种类型的数字型变量相比,你无需担心常量之间的类型转换问题,因为它们都是非常理想的数字。 不过需要注意的是,当常量赋值给一个精度过小的数字 该类字符串使用双引号括起来,其中的相关的转义字符将被替换,这些转义字符包括: \n :换行符 \r :回车符 \t :tab 键 \u 或 \U :Unicode 字符 \\ :反斜杠自身 非解释字符串: 该类字符串使用反引号括起来,支持换行,例如: 1. `This is a raw string \n` 中的 `\n\` 会被原样输出。 和 C/C++不一样,Go 中的字符串是根据长度限定,而非特殊字符 4.9 指针 4.9 指针 - 100 - 本文档使用 书栈(BookStack.CN) 构建 符号 可以放在一个指针前,如 `intP`,那么它将得到这个指针指向地址上所存储的值;这被称为反引用(或者内容 或者间接引用)操作符;另一种说法是指针转移。 对于任何一个变量 var, 如下表达式都是正确的: var == *(&var) 。 现在,我们应当能理解 pointer.go 的全部内容及其输出:0 码力 | 466 页 | 4.44 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a言的态度去学习和使 用Go。 持有这种态度阻止了我更深刻地理解Go。 Go是一门特性丰富的语言。它的语法集虽然不大,但我们也不能说它很小。 Go中的一些语法和语义设计很简单明了,但也有一些设计略微反直觉,甚至自 相矛盾。 Go语法和语义设计中有很多折衷和权衡。一个Go程序员需要相当的 Go编程经验和感悟才能理解这些权衡。 Go提供了几种基本但非必需的类型,比如切片,接口和通道。 Go编译器和运 \t (rune值:0x09) 水平制表符(horizontal tab) \v (rune值:0x0b) 竖直制表符(vertical tab) \\ (rune值:0x5c) 一个反斜杠(backslash) \' (rune值:0x27) 一个单引号(single quote) 其中,\n在日常编程中用得最多。 一个例子: println('\n') // 10 甚至所有的Go源代码都必须是UTF-8编码 的。 Go字符串的字面量形式有两种。 一种是解释型字面表示(interpreted string literal,双引号风格)。 另一种是直白字面表示(raw string literal,反引号风 格)。 下面的两个字符串表示形式是等价的: // 解释形式 "Hello\nworld!\n\"你好世界\"" // 直白形式 `Hello world! "你好世界"` 在上面的解释形0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a的态度去学习和 使用Go。 持有这种态度阻止了我更深刻地理解Go。 Go是一门特性丰富的语言。它的语法集虽然不大,但我们也不能说它很小。 Go中的一些语法和语义设计很简单明了,但也有一些设计略微反直觉,甚至 自相矛盾。 Go语法和语义设计中有很多折衷和权衡。一个Go程序员需要相当 的Go编程经验和感悟才能理解这些权衡。 Go提供了几种基本但非必需的类型,比如切片,接口和通道。 Go编译器和运 回收的结尾常常会 有明显的停顿。 但是自从Go 1.8,使用gc编译的程序在运行时刻已经基本消除 了停顿现象。 gc支持跨平台编译。 比如,我们可以在Linux平台上编译出Windows程序,反 之亦然。 使用Go编写的程序常常编译得非常快。 编译时间的长短是开发愉悦度的一个 重要因素。 编译时间短是很多程序员喜欢Go的一个原因。 Go程序生成的二进制可执行文件常常拥有以下优点: 内存消耗少 \t (rune值:0x09) 水平制表符(horizontal tab) \v (rune值:0x0b) 竖直制表符(vertical tab) \\ (rune值:0x5c) 一个反斜杠(backslash) \' (rune值:0x27) 一个单引号(single quote) 其中,\n在日常编程中用得最多。 一个例子: 1| println('\n') //0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a度去学习和使用 Go。 持有这种态度阻止了我更深刻地理解Go。 Go是一门特性丰富的语言。它的语法集虽然不大,但我们也不能说它很小。 Go中的 一些语法和语义设计很简单明了,但也有一些设计略微反直觉,甚至自相矛盾。 Go 语法和语义设计中有很多折衷和权衡。一个Go程序员需要相当的Go编程经验和感悟 才能理解这些权衡。 Go提供了几种基本但非必需的类型,比如切片,接口和通道。 Go编译器和运行时在 (rune值:0x09) 水平制表符(horizontal tab) \v (rune值:0x0b) 竖直制表符(vertical tab) \\ (rune值:0x5c) 一个反斜杠(backslash) \' (rune值:0x27) 一个单引号(single quote) 其中,\n在日常编程中用得最多。 一个例子: 1| println('\n') // 甚至所有的Go源代码都必须是UTF-8编码的。 Go字符串的字面量形式有两种。 一种是解释型字面表示(interpreted string literal,双引号风格)。 另一种是直白字面表示(raw string literal,反引号 风格)。 下面的两个字符串表示形式是等价的: // 解释形式 "Hello\nworld!\n\"你好世界\"" // 直白形式 `Hello world! "你好世界"`0 码力 | 591 页 | 21.40 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Go 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.go === hello‑algo.com 56 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的 定義。 ‧ 原碼:我們將數字的二進位制表示的最高位視為符號位,其中0 码力 | 385 页 | 18.80 MB | 10 月前3
Hello 算法 1.1.0 Go版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 www.hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 384 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0 Golang版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版等学完必读章节后再单独攻克。 3.3.1. 原码、反码和补码 从上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个。例如,byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及到原码、反码、补码的相关知识。在展开分析之前, 我们首先给出三者的定义: ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 0 表示正数,1 表示负数,其余位表示数字 议有兴趣的读者进一步深度了解。 3.3.2. 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 bytes,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。根据 IEEE 754 标准,32‑bit 长度的 float 由以下 firtstElementAddr + elementLength * elementIndex � 为什么数组元素的索引要从 0 开始编号呢? 观察上图,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更 自然。 然而,从地址计算公式的角度看,索引本质上表示的是内存地址的偏移量。首个元素的地址偏 移量是 0 ,因此索引为 0 也是合理的。 访问元素的高效性带来了诸多便利。例如,我们可以在0 码力 | 347 页 | 27.40 MB | 1 年前3
共 19 条
- 1
- 2













