Hello 算法 1.0.0b4 Golang版度,因此更易于理解。在本书中,重点和难点知识 将主要通过动画和图解形式展示,而文字则作为动画和图片的解释与补充。 在阅读本书时,如果发现某段内容提供了动画或图解,建议以图为主线,以文字(通常位于图像上方)为辅, 综合两者来理解内容。 Figure 0‑2. 动画图解示例 0. 前言 hello‑algo.com 4 0.2.3. 在代码实践中加深理解 本书的配套代码托管在GitHub 4. 数组与链表 hello‑algo.com 53 4.1.2. 数组缺点 数组在初始化后长度不可变。由于系统无法保证数组之后的内存空间是可用的,因此数组长度无法扩展。而 若希望扩容数组,则需新建一个数组,然后把原数组元素依次拷贝到新数组,在数组很大的情况下,这是非 常耗时的。 // === File: array.go === /* 扩展数组长度 */ func extend(nums 更新元素数量 l.numsSize-- // 返回被删除元素 return num } /* 列表扩容 */ func (l *myList) extendCapacity() { // 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组拷贝到新数组 l.nums = append(l.nums, make([]int, l.numsCapacity*(l.extendRatio-1))0 码力 | 347 页 | 27.40 MB | 1 年前3
Go 入门指南(The way to Go)Println(a, b, c) } 输出: {5} {5} {5} 练习 10.1 vcard.go: 定义结构体 Address 和 VCard,后者包含一个人的名字、地址编号、出生日期和图像,试着选择正确的 数据类型。构建一个自己的 vcard 并打印它的内容。 提示: VCard 必须包含住址,它应该以值类型还是以指针类型放在 VCard 中呢? 第二种会好点,因为它占用内存少。包含一个名字和两个指向地址的指针的 {1 2} 练习 10.5 anonymous_struct.go: 创建一个结构体,它有一个具名的 float 字段,2 个匿名字段,类型分别是 int 和 string。通过结构体字面 量新建一个结构体实例并打印它的内容。 10.5.3 命名冲突 当两个字段拥有相同的名字(可能是继承来的名字)时该怎么办呢? 1. 外层名字会覆盖内层名字,这提供了一种重载字段或方法的方式 2. 如 Engine 可运行的例子,并且给 Car 类型一个 wheelCount 字段和一个 numberOfWheels() 方法。 创建一个 Mercedes 类型,它内嵌 Car ,并新建 Mercedes 的一个实例,然后调用它的方法。 然后仅在 Mercedes 类型上创建方法 sayHiToMerkel() 并调用它。 10.6.6 如何在类型中嵌入功能 主要有两种方法来实现在类型中嵌入功能:0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)Println(a, b, c) 19. } 输出: 1. {5} {5} {5} 练习 10.1 vcard.go: 定义结构体 Address 和 VCard,后者包含一个人的名字、地址编号、出生日期和图像,试着选择正确的数据类 型。构建一个自己的 vcard 并打印它的内容。 1. 提示: 2. VCard 必须包含住址,它应该以值类型还是以指针类型放在 VCard 中呢? 3. 第二种会好 CN) 构建 练习 10.5 anonymous_struct.go: 创建一个结构体,它有一个具名的 float 字段,2 个匿名字段,类型分别是 int 和 string。通过结构体字面量 新建一个结构体实例并打印它的内容。 当两个字段拥有相同的名字(可能是继承来的名字)时该怎么办呢? 1. 外层名字会覆盖内层名字(但是两者的内存空间都保留),这提供了一种重载字段或方法的方式; 2. 可运行的例子,并且给 Car 类型一个 wheelCount 字段和一个 numberOfWheels() 方法。 创建一个 Mercedes 类型,它内嵌 Car ,并新建 Mercedes 的一个实例,然后调用它的方法。 然后仅在 Mercedes 类型上创建方法 sayHiToMerkel() 并调用它。 主要有两种方法来实现在类型中嵌入功能:0 码力 | 466 页 | 4.44 MB | 1 年前3
Go Web编程(注:这个不是Go安装目录。下面以笔者的工作目录为说明,请替换自己机器上的工作目录。) 在类似 Unix 环境大概这样设置: sh export GOPATH=/home/apple/mygo Windows 设置如下,新建一个环境 变量名称叫做GOPATH: sh GOPATH=c:\mygo GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录 的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go 应用目录结构 应用目录结构 建立包和目录:$GOPATH/src/mymath/sqrt.go(包名:"mymath") 以后自己新建应用或者一个代码包都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称,当然也允许多 级目录,例如在src下面新建了目录$GOPATH/src/github.com/astaxie/beedb 那么这个包路径就 是“github.com/astaxie com/astaxie/beedb”,包名称是最后一个目录beedb 执行如下代码 sh cd $GOPATH/src mkdir mymath 新建文件sqrt.go,内容如下 ```go // $GOPATH/src/mymath/sqrt.go源码如下: package mymath func Sqrt(x float64) float64 { z := 0.0 for i := 0; i0 码力 | 295 页 | 5.91 MB | 1 年前3
可视化学习 Go 并发编程com/divan) 大神,主要包含两个程序: gotrace(go):分析 go tool trace 的执行结果 gothree(js): 基于 ThreeJs 和 WebGL 生成 3D 图像 感谢 divan (https://github.com/divan) 大神 提供了这款工具和不少 Go 并发模式的素材 说了这么多,耳听为虚,眼见为实 1. HELLO, WORLD! package /src/binary /src/main.go ./binary 2> ./trace.out gotrace ./trace.out 会自动打开浏览器,你可调整视角、缩放、旋转以及加粗线条来改变图像 使用场景 非常酷! 学习 Go 的并发模式 探究 Go 的并发过程 Thank you 2017.8.5 黄庆兵 - 网易 bingohuang.com https://c.163yun0 码力 | 29 页 | 1.48 MB | 1 年前3
5.cgo 原理解析及优化实践G 绑定了 M ② P 让出给 C 线程 因为 G 绑定了 M C 线程恢复执行 因为 C 调用 Go 是同步 API 新建普通协程 ① lockedg 尽量少干活,尽快启动一个新的协程 newg,然后返回到 C ② 释放的 P,会携带新建的 newg,在一个新的 Go 线程上执行 Go 调 C ① “释放”P 并没有立即执行,需要等 sysmon 来 retake 0 码力 | 45 页 | 5.74 MB | 1 年前3
Hello 算法 1.0.0b1 Golang版nums[randomIndex] return } 4.1.2. 数组缺点 数组在初始化后长度不可变。由于系统无法保证数组之后的内存空间是可用的,因此数组长度无法扩展。而若 希望扩容数组,则需新建一个数组,然后把原数组元素依次拷贝到新数组,在数组很大的情况下,这是非常耗 时的。 4. 数组与链表 hello‑algo.com 47 // === File: array.go === /* 更新元素数量 l.numsSize-- // 返回被删除元素 return num } /* 列表扩容 */ func (l *myList) extendCapacity() { // 新建一个长度为 self.__size 的数组,并将原数组拷贝到新数组 l.nums = append(l.nums, make([]int, l.numsCapacity*(l.extendRatio-1)) change”按钮;页面跳转后,点击“Create pull request”按钮发起拉取请求即可。 12. 附录 hello‑algo.com 185 Figure 12‑1. 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述图片问题,我会第一时间重新画图并替换图片。 12.2.2. 内容创作 如果您想要参与本开源项目,包括翻译代码至其他编程语言、拓展文章内容等,那么需要实施 Pull Request0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版nums[randomIndex] return } 4.1.2. 数组缺点 数组在初始化后长度不可变。由于系统无法保证数组之后的内存空间是可用的,因此数组长度无法扩展。而若 希望扩容数组,则需新建一个数组,然后把原数组元素依次拷贝到新数组,在数组很大的情况下,这是非常耗 时的。 4. 数组与链表 hello‑algo.com 47 // === File: array.go === /* 更新元素数量 l.numsSize-- // 返回被删除元素 return num } /* 列表扩容 */ func (l *myList) extendCapacity() { // 新建一个长度为 self.__size 的数组,并将原数组拷贝到新数组 l.nums = append(l.nums, make([]int, l.numsCapacity*(l.extendRatio-1)) change”按钮;页面跳转后,点击“Create pull request”按钮发起拉取请求即可。 12. 附录 hello‑algo.com 197 Figure 12‑1. 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述图片问题,我会第一时间重新画图并替换图片。 12.2.2. 内容创作 如果您想要参与本开源项目,包括翻译代码至其他编程语言、拓展文章内容等,那么需要实施 Pull Request0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.1.0 Go版return } 7. 扩容数组 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示: 第 4 章 数组与链表 hello‑algo.com 72 // === 更新元素数量 l.arrSize-- // 返回被删除的元素 return num } /* 列表扩容 */ func (l *myList) extendCapacity() { // 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组复制到新数组 l.arr = append(l.arr, make([]int, l.arrCapacity*(l.extendRatio-1)) 在页面底部填写修改说明,然后点击“Propose file change”按钮。页面跳转后,点击“Create pull request”按钮即可发起拉取请求。 图 16‑3 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 2. 内容创作 如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版return } 7. 扩容数组 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示: 第 4 章 数组与链表 hello‑algo.com 72 // === 更新元素数量 l.arrSize-- // 返回被删除的元素 return num } /* 列表扩容 */ func (l *myList) extendCapacity() { // 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组复制到新数组 l.arr = append(l.arr, make([]int, l.arrCapacity*(l.extendRatio-1)) 在页面底部填写修改说明,然后点击“Propose file change”按钮。页面跳转后,点击“Create pull request”按钮即可发起拉取请求。 图 16‑3 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 2. 内容创作 如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request0 码力 | 382 页 | 17.60 MB | 1 年前3
共 13 条
- 1
- 2













