Golang 101(Go语言101 中文版) v1.21.a
第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和0 码力 | 591 页 | 21.40 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘 ? 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是0 码力 | 821 页 | 956.82 KB | 1 年前3Go Web编程
iota,因此w == 3。其实上面y和z可同样不用"= iota" ) const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0 Go程序设计的一些规则 Go程序设计的一些规则 Go之所以会那么简洁,是因为它有一些默认的行为: - 大写字母开头的变量是可导出的,也就是其它包可以读取 的,是公用变量;小写字母开头的就是不可导出的,是私有变量。 - 大写字母开头的函数也是一样,相当于class 转到其相应的handle函数,那么这个我们有设置过吗?有,我 们调用的代码里面第一句不是调用了http.HandleFunc("/", sayhelloName)嘛。这个作用就是注册了请求/的 路由规则,当请求uri为"/",路由就会转到函数sayhelloName,DefaultServeMux会调用ServeHTTP方法,这个方法内 部其实就是调用sayhelloName本身,最后通过写入response的信息反馈到客户端。 ServeMux struct { mu sync.RWMutex //锁,由于请求涉及到并发处理,因此这里需要一个锁机制 m map[string]muxEntry // 路由规则,一个string对应一个mux实体,这里的string就是注册的路由表达式 } 下面看一下muxEntry type muxEntry struct { explicit bool0 码力 | 295 页 | 5.91 MB | 1 年前3Hello 算法 1.0.0b1 Golang版
表格,其中每个单元格都可以存储 1 byte 的数据,在算法运 行时,所有数据都被存储在这些单元格中。 系统通过「内存地址 Memory Location」来访问目标内存位置的数据。计算机根据特定规则给表格中每个 单元格编号,保证每块内存空间都有独立的内存地址。自此,程序便通过这些地址,访问内存中的数据。 Figure 3‑2. 内存条、内存空间、内存地址 内存资源是设计数据结构与算法的重 ) 添加元素 ?(?) ?(1) 删除元素 ?(?) ?(1) 61 5. 栈与队列 5.1. 栈 「栈 Stack」是一种遵循「先入后出 first in, last out」数据操作规则的线性数据结构。我们可以将栈类比为放 在桌面上的一摞盘子,如果需要拿出底部的盘子,则需要先将上面的盘子依次取出。 “盘子”是一种形象比喻,我们将盘子替换为任意一种元素(例如整数、字符、对象等),就得到了栈数据结 得到了栈数据结 构。 我们将这一摞元素的顶部称为「栈顶」,将底部称为「栈底」,将把元素添加到栈顶的操作称为「入栈」,将删除 栈顶元素的操作称为「出栈」。 Figure 5‑1. 栈的先入后出规则 5.1.1. 栈常用操作 栈的常用操作见下表(方法命名以 Java 为例)。 方法 描述 时间复杂度 push() 元素入栈(添加至栈顶) ?(1) pop() 栈顶元素出栈 ?(1)0 码力 | 190 页 | 14.71 MB | 1 年前3Hello 算法 1.0.0b2 Golang版
表格,其中每个单元格都可以存储 1 byte 的数据,在算法运 行时,所有数据都被存储在这些单元格中。 系统通过「内存地址 Memory Location」来访问目标内存位置的数据。计算机根据特定规则给表格中每个 单元格编号,保证每块内存空间都有独立的内存地址。自此,程序便通过这些地址,访问内存中的数据。 Figure 3‑2. 内存条、内存空间、内存地址 内存资源是设计数据结构与算法的重 ) 添加元素 ?(?) ?(1) 删除元素 ?(?) ?(1) 61 5. 栈与队列 5.1. 栈 「栈 Stack」是一种遵循「先入后出 first in, last out」数据操作规则的线性数据结构。我们可以将栈类比为放 在桌面上的一摞盘子,如果需要拿出底部的盘子,则需要先将上面的盘子依次取出。 “盘子”是一种形象比喻,我们将盘子替换为任意一种元素(例如整数、字符、对象等),就得到了栈数据结 得到了栈数据结 构。 我们将这一摞元素的顶部称为「栈顶」,将底部称为「栈底」,将把元素添加到栈顶的操作称为「入栈」,将删除 栈顶元素的操作称为「出栈」。 Figure 5‑1. 栈的先入后出规则 5.1.1. 栈常用操作 栈的常用操作见下表,方法名需根据编程语言来确定,此处我们以常见的 push , pop , peek 为例。 方法 描述 时间复杂度 push() 元素入栈(添加至栈顶)0 码力 | 202 页 | 15.73 MB | 1 年前3Go 入门指南(The way to Go)
开发中无可撼动的铁 律,因此你必须在编译或提交版本管理系统之前使用 gofmt 来格式化你的代码。 尽管这种做法也存在一些争论,但使用 gofmt 后你不再需要自成一套代码风格而是和所有人使用相同的 规则。这不仅增强了代码的可读性,而且在接手外部 Go 项目时,可以更快地了解其代码的含义。此外, 大多数开发工具也都内置了这一功能。 Go 对于代码的缩进层级方面使用 tab 还是空格并没有强制规定,一个 会格式化并重写所有 Go 源文件; gofmt map1 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件。 gofmt 也可以通过在参数 -r 后面加入用双引号括起来的替换规则实现代码的简单重构,规则的格式: <原始内容> -> <替换内容> 。 实例: gofmt -r “(a) -> a” –w *.go Go入门指南 - 24 - 本文档使用 看云 构建 上面的代码会将源文件中没有意义的括号去掉。 称冲突。但是相同的标识符可以在不同 的包中使用,因为可以使用包名来区分它们。 Go入门指南 - 33 - 本文档使用 看云 构建 包通过下面这个被编译器强制执行的规则来决定是否将自身的代码对象暴露给外部文件: 可见性规则 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使 用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导0 码力 | 380 页 | 2.97 MB | 1 年前3Go 入门指南(The way to Go)
开发中无可撼动的铁律,因此你必须在编译或提交 版本管理系统之前使用 gofmt 来格式化你的代码。 尽管这种做法也存在一些争论,但使用 gofmt 后你不再需要自成一套代码风格而是和所有人使用相同的规则。这 不仅增强了代码的可读性,而且在接手外部 Go 项目时,可以更快地了解其代码的含义。此外,大多数开发工具也都 内置了这一功能。 Go 对于代码的缩进层级方面使用 tab 还是空格并没有强制规定,一个 Go 源文件; gofmt map1 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件。 gofmt 也可以通过在参数 -r 后面加入用双引号括起来的替换规则实现代码的简单重构,规则的格式: <原始内 容> -> <替换内容> 。 实例: 1. gofmt -r '(a) -> a' –w *.go 上面的代码会将源文件中没有意义的括号去掉。 1. gofmt 用,因为可以使用包名来区分它们。 4.2 Go 程序的基本结构和要素 - 58 - 本文档使用 书栈(BookStack.CN) 构建 包通过下面这个被编译器强制执行的规则来决定是否将自身的代码对象暴露给外部文件: 可见性规则 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式 的标识符的对象就可以被外部包的代码所使用(客户端程序需0 码力 | 466 页 | 4.44 MB | 1 年前3Hello 算法 1.0.0b4 Golang版
表格,其中每个单元格都可以存储 1 byte 的数据,在 算法运行时,所有数据都被存储在这些单元格中。 系统通过「内存地址 Memory Location」来访问目标内存位置的数据。计算机根据特定规则为表格中的每 个单元格分配编号,确保每个内存空间都有唯一的内存地址。有了这些地址,程序便可以访问内存中的数 据。 Figure 3‑2. 内存条、内存空间、内存地址 内存是所有程序的共享资源 来表示一个字符,根据字符的复杂性而变。ASCII 字符只需要 1 个字节,拉丁字母和希腊字母需要 2 个字节, 常用的中文字符需要 3 个字节,其他的一些生僻字符需要 4 个字节。 UTF‑8 的编码规则并不复杂,分为两种情况: ‧ 对于长度为 1 字节的字符,将最高位设置为 0 、其余 7 位设置为 Unicode 码点。值得注意的是,ASCII 字符在 Unicode 字符集中占据了前 128 ? 位设置为 1 比较容易理解,可以向系统指出字符的 长度为 ? 。那么,为什么要将其余所有字节的高 2 位都设置为 10 呢?实际上,这个 10 能够起到校验符的作 用,因为在 UTF‑8 编码规则下,不可能有字符的最高两位是 10 。这是因为长度为 1 字节的字符的最高一位 是 0 。假设系统从一个错误的字节开始解析文本,字节头部的 10 能够帮助系统快速的判断出异常。 Figure 3‑80 码力 | 347 页 | 27.40 MB | 1 年前3Go语言基础 Golang Fundaments
渴望成为质量、效率和简单的冠军。 • 有自己的观点。 • 重视反省和自我检讨。 Go语言应该是这样的 • 易于阅读代码 • 对遗存软件友好 • 心智模型 • 生产率与性能 • 正确性与性能 • 规则 • 方便代码评审 – 完整性 – 可读性 – 简单性 – 性能 – 微优化 Ultimate Go,https://github.com/ardanlabs/gotraining/blob/m com/spf13/cobra • https://github.com/spf13/cobra – 包名必须小写且符合Unix文件命令规则 – 包名全称,规则:[git仓库]/[用户]/[仓库路径] • 包里文件 – 源代码 – 测试代码 – API文档 – 其他资源文件 按规则可找到源代码,方便阅读 包导出名 • 包中定义的 – 类型 – 常量 – 变量 – 函数 • 如果首字母大写,则是全局可访问的0 码力 | 21 页 | 851.30 KB | 1 年前3
共 26 条
- 1
- 2
- 3