使用Go与redis构建有趣的应用丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) • 强⼤大的多机功能⽀支持:主从复制(单主多从)、Sentinel(⾼高可⽤用)、集群(基于 Raft 算法,多 主多从,内建⾼高可⽤用) 特点 • 具有多种不不同的数据结构可⽤用,其中包括:字符串串、散列列、列列表、集合、有序集合、位图 (bitmap)、HyperLogLog、地理理坐标(GEO) 丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) • 强⼤大的多机功能⽀支持:主从复制(单主多从)、Sentinel(⾼高可⽤用)、集群(基于 Raft 算法,多 主多从,内建⾼高可⽤用) • 拥有⽆无限可能性的扩展模块系统:神经⽹网络、全⽂文搜索、JSON 数据结构等等。 数据结构 data structures 索引 锁是⼀一种同步机制, 它可以保证⼀一项资源在任何时候只能被⼀一个进程使⽤用, 如果有其他进程想要 使⽤用相同的资源, 那么它们就必须等待, 直到正在使⽤用资源的进程放弃使⽤用权为⽌止。 锁 锁是⼀一种同步机制, 它可以保证⼀一项资源在任何时候只能被⼀一个进程使⽤用, 如果有其他进程想要 使⽤用相同的资源, 那么它们就必须等待, 直到正在使⽤用资源的进程放弃使⽤用权为⽌止。 ⼀一个锁实现通常会有获取(0 码力 | 176 页 | 2.34 MB | 1 年前3
 Go Web编程的都是通用的。 LiteIDE LiteIDE LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。 18 图1.4 LiteIDE主界面 LiteIDE主要特点: LiteIDE主要特点: 支持主流操作系统 Windows Linux MacOS X Go编译环境管理和切换 管理和切换多个Go编译环境 支持Go语言交叉编译 Emacs Emacs Emacs传说中的神器,她不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者 置身于全功能的操作系统中。 图1.10 Emacs编辑Go主界面 1. 配置Emacs高亮显示 cp $GOROOT/misc/emacs/* ~/.emacs.d/ 25 2. 安装Gocode go get -u github.com/nsf/gocode speedbar 手动开启。 Eclipse Eclipse Eclipse也是非常常用的开发利器,以下介绍如何使用Eclipse来编写Go程序。 27 图1.11 Eclipse编辑Go的主界面 1. 首先下载并安装好Eclipse 2. 下载goeclipse插件 http://code.google.com/p/goclipse/wiki/InstallationInstructions0 码力 | 295 页 | 5.91 MB | 1 年前3
 2.7 Golang与高性能DSP竞价系统需要替代⽅方案 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 取消Redis的主从同步 • 写主Redis时,同时写⼀一份到NSQ,异步写⼊入其他机房 • 使⽤用SoftLayer的⾹香港云主机作为中转(why?) Redis跨机房同步 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 独⽴立部署 • ⽅方便更新与重启 把服务划分为独⽴立的进程 ./bin ├── adx_mod ├── analysis ├── bid ├── charge ├── convrate_import ├── cookie_map ├── dispatch Reserved • Go不⽀支持以后台进程的⽅方式启动 • 使⽤用Supervise来管理进程 • 配合parallel-ssh做集群管理 部署:进程管理 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • Nginx做前端 • 开多个Go进程 • Nginx的upstream做负载均衡0 码力 | 51 页 | 5.09 MB | 1 年前3
 Hello 算法 1.0.0b4 Golang版循环链表常被用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环的操作就可以通过循环链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用到循环链表。比如在音频、视频播放器中,数 据流可能会被 表示两顶点之间无边。 9. 图 hello‑algo.com 167 Figure 9‑5. 图的邻接矩阵表示 邻接矩阵具有以下特性: ‧ 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义。 ‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 , 0 替换为权重,则可表示有权图。 使用邻接矩阵表示图时,我们可以直接访问矩阵元素以获取边,因此增删查操作的效率很高,时间复杂度均 size() || j >= g.size() || i == j { fmt.Errorf("%s", "Index Out Of Bounds Exception") } // 在无向图中,邻接矩阵沿主对角线对称,即满足 (i, j) == (j, i) g.adjMat[i][j] = 1 g.adjMat[j][i] = 1 } /* 删除边 */ // 参数 i, j 对应 vertices0 码力 | 347 页 | 27.40 MB | 1 年前3
 1.5 Go 语言构建高并发分布式系统实践使⽤用timefd 通过channel与其他⽤用户通信 使⽤用eventfd事件通知的⽅方式,根据epoll获取 的fd绑定的回调函数和参数进⾏行回调操作 对外的通信采取阻io或者也可以go出去,不 阻塞主循环 对外通信信全局消息list,在映射到的 eventloop上开连接池进⾏行消耗 推荐使用 开发体会的对⽐比 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? go语⾔言运维管理⽅方⾯面的独特魅⼒力…… 具有go语⾔言特⾊色的运维 Æ 可视化平台 Profiling可视化 将常规排查问题从⼿手⼯工经验化,变成流程化的过程 ⽐比较不同时间维度,两次上线后,进程的各种状态 对于优化上线的效果,可评估(上线新功能发现问题与后续确定KPI神器) 具有go语⾔言特⾊色的运维:以项⺫⽬目为例 性能可视化 具有go语⾔言特⾊色的运维 Æ 可视化平台 Profiling可视化 将常规排查问题从⼿手⼯工经验化,变成流程化的过程 ⽐比较不同时间维度,两次上线后,进程的各种状态 对于优化上线的效果,可评估(上线新功能发现问题与后续确定KPI神器) 通信库状态可视化 Æ 最接近业务场景的百万级别压测后台0 码力 | 39 页 | 5.23 MB | 1 年前3
 Hello 算法 1.0.0b5 Golang版// 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画和图解形式展示,而文字则作为动画和图片的解释与补充。 如果你在阅读本书时,发现某段内容提供了图 0‑2 所示的动画或图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 循环链表常被用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环的操作就可以通过循环链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用到循环链表。比如在音频、视频播放器中,数 据流可能会被 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测、多次哈希等。 1. 线性探测 线性探测采用固定步长的线性搜索来进行探测,其操作方法与普通哈希表有所不同。 ‧ 插入元素:通过哈希函数计算数组索引,若发现桶内已有元素,则从冲突位置向后线性遍历(步长通常0 码力 | 379 页 | 30.70 MB | 1 年前3
 Hello 算法 1.1.0 Go版// 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 环形链表常用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的0 码力 | 383 页 | 18.48 MB | 1 年前3
 Hello 算法 1.0.0 Golang版0 章 前言 hello‑algo.com 5 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 环形链表常用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的0 码力 | 382 页 | 17.60 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Go 版// 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 环形链表常用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 www.hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固0 码力 | 384 页 | 18.49 MB | 10 月前3
 Golang 101(Go语言101 中文版)  v1.21.a最后,我写了大约20篇Go文 章。 与此同时,我收集到了比以前更多的Go编程中的细节。 此时到了重启编 写一本新的Go编程书籍的时候了。 我写了另外大约十篇Go基础教程和另外大约二十篇Go语言中关于各种其它主 题的文章。 所以现在《Go语言101》大约有50篇文章。 你曾经的困惑主要包括哪些方面? 一些困惑是关于一些Go语法和语义设计细节的。 一些困惑涉及到某些类型的 值,主要是切片,接口和通道类型。 gc编译器是Go官方工具链中一个组件。 Go官方工具链的使用将在下一篇文章 中介绍。 Go官方工具链1.0发布于2012年三月。 Go语言规范的最新版本和Go 官方工具链的最新版本总是保持一致。 每年Go官方工具链发行两个主版本。 自从Go语言正式发布后,Go的语法变化很小。 但是标准编译器gc却在不断地 改进。 使用早期的gc编译的程序在运行的时候在每次垃圾回收的结尾常常会 有明显的停顿。 但是自从Go 1.8, + 1 23 | } 24 | } 25 | return a, b // 此函数返回两个结果 26 | } 27 | 28 | // main函数,或主函数,是一个程序的入口函数。 29 | func main() { 30 | var num = 100 31 | // 调用上面声明的StatRandomNumbers函数,0 码力 | 821 页 | 956.82 KB | 1 年前3
共 39 条
- 1
 - 2
 - 3
 - 4
 













