
编程语言:go
go 语言从入门到实战,能够在分布式领域多一个强大的工具
z_stand
远离颠倒梦想,究竟涅槃
展开
-
cannot find main module 解决办法
做6.824 实验的过程中想要跑测试,发现go test -run 2A时 出现cannot find main module问题,测试跑不起来。原因这个原因是从GO1.11 版本开始引入了go.mod文件来对项目中的go源码的编译相关的内容进行管理,经常使用GO的同学可能深受go get或者GOPATH的配置之苦,这个时候引入了go.mod文件,就能将这一些配置释放出来,只需要将项目需要的依赖以及项目的路径放在go.mod中,交给GO本身来做即可。这个时候一些老的GO项目本身没有配置go.mod文件原创 2021-05-09 15:40:26 · 2082 阅读 · 1 评论 -
Go 分布式学习利器(20)-- Go并发编程之多路选择和超时控制,channel的关闭和广播
这里主要介绍Go并发编程中的如何使用 Select多路选择以及超时机制 防止协程的执行出现slow response。同时也介绍了channel的关闭和广播机制 如何在类 生产者和消费者模型中保证程序的优雅下线和高可用。原创 2020-12-26 20:19:49 · 335 阅读 · 0 评论 -
Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制
文章目录前言CSP 特点CSP代码 演示1. 正常流程的代码2. CSP 未设置buffer 代码3. 设置指定大小的channel buffer总结前言CSP 这个名词大家会比较陌生,但是说到future 熟悉C++ / JAVA 线程模型的伙伴可能就会很熟悉了, 通过future机制能够实现两个线程之间的数据交互,当然通过通用的mutex 和 condition_variable 也能够实现,但这一些机制的引入无形中会大大增加代码的复杂度。举例一段C++代码:#include <iost原创 2020-12-22 23:25:56 · 449 阅读 · 0 评论 -
Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C++/Java中线程之间线程安全是一个常见的问题。如下Go 语言代码:func TestConcurrent(t *testing.T) { var counter int = 0 for i := 0;i < 5000; i ++{ go func() { // 启动groutine 进行变量的自增 counter ++ }() } time.Sleep(time.Second * 1)原创 2020-12-22 00:29:17 · 420 阅读 · 1 评论 -
Go 分布式学习利器(17)-- Go并发编程之协程机制:Grountine 原理及使用
文章目录1. Thread VS Groutine2. Groutine 调度原理3. Groutine 示例代码关于Go的底层实现还需要后续持续研究,文中如有一些原理描述有误,欢迎指证。1. Thread VS Groutine这里主要介绍一下Go的并发协程相比于传统的线程 的不同点:创建时默认的stack大小JDK5 以后Java thread stack默认大小为1MC++ 的thread stack 默认大小为8MGrountine 的 Stack初始化大小为2K所以Groun原创 2020-12-20 19:47:43 · 455 阅读 · 0 评论 -
Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)
今天介绍两种基础的字符串匹配算法,当然核心还是熟悉一下Go的语法,巩固一下基础知识BF(Brute Force)RK(Rabin Karp)源字符串:src, 目标字符串:dest; 确认dest是否是src 的一部分。BF算法很简单暴力,维护两个下标i,j,i控制src的遍历顺序, j控制dest遍历顺序。记录一下i的起始位置,当j和i所在的字符匹配的时候,j和i都移动,知道j达到末尾则直接返回匹配。否则i 回到起始位置的下一个位置,j 回到起始位置,两者重新进行匹配搜索。由于比较简单,原创 2020-12-19 23:15:32 · 930 阅读 · 1 评论 -
Go 分布式学习利器(16) -- go中可复用的package构建
通过本文,你将了解go 语言中如何将自己的package构建到项目中 以及如何将远程(github)的package构建到项目中。1. 构建本地的packagepackage 是可复用模块的基本单元,以首字母大写的函数实现来表明可被包外代码访问代码的package可以和所在路径的代码不一致同一目录里的Go 代码的package 要保持一致个人理解 本地包就像是C++/C中的头文件,其他代码只需要包含该头文件,即可使用头文件中生命的函数。这里构建自己Go语言的package的时候需要注意代码路原创 2020-12-13 13:49:20 · 271 阅读 · 0 评论 -
Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法。通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系)。涉及到的Go语言语法:Go的封装特性空接口和 断言数组的切片特性Go 实现的双向链表库 – container/list实现基本的搜索算法:深搜和广搜深度优先搜索 就是沿着一个方向一直走,如果发现最后的结果是失败的,回溯到上一步,继续尝试其他分支。广度优先搜索 就是层次搜索,将从当前节点到下一节点所有的步原创 2020-11-29 19:08:58 · 425 阅读 · 5 评论 -
Go 分布式学习利器(14)-- Go语言的错误处理
Go语言常见的错误处理:Error 报错panic 程序异常退出recover 异常退出的错误恢复原创 2020-11-28 19:10:40 · 299 阅读 · 0 评论 -
Go 分布式学习利器(13)-- Go语言的多态
文章目录1. 基本的多态实现2. 空接口与断言3. Go接口的最佳实践1. 基本的多态实现我们知道C++中实现多态是通过虚函数表 和 继承来 实现的。类似如下代码:class Programmar{public: virtual void write_hello_world() = 0;}class GoProgrammar: public Programmar{public: void write_hello_world() { printf("Go write hello wo原创 2020-11-28 17:31:24 · 319 阅读 · 0 评论 -
Go 分布式学习利器(12)-- Go语言的扩展和复用
Go语言无法天然支持继承,但是又想要实现面向对象的特性。即父类对象 使用子类对象初始化,那么该父类对象调用的函数就是子类实现的函数 ,从而满足LSP(子类交换原则)。案例一: Go语言 支持扩展父类的功能,如下代码:package oriented_testimport ( "fmt" "testing")// Pet 类type Pet struct {}func (p *Pet) Speak(){ // Pet类的函数成员 fmt.Print("Pet speak.\n")原创 2020-11-28 16:14:25 · 446 阅读 · 0 评论 -
Go 分布式学习利器(11)-- Go语言通过单链表 实现队列
1. Go语言接口特性2. Go语言封装特性3. Go语言 变量,指针,函数 语法 4. GO语言 条件和循环语句 的语法5. GO语言的测试程序原创 2020-11-21 22:38:55 · 275 阅读 · 0 评论 -
Go 分布式学习利器(10)-- Go语言的接口
1. Go 语言的接口依赖2. Go语言的自定义 数值类型和函数类型介绍原创 2020-11-20 23:15:32 · 288 阅读 · 0 评论 -
Go 分布式学习利器(9)-- Go语言 结构体的行为定义和实现
1. Go语言 的面向对象 -- 封装特性2. Go语言 中行为的定义,通过指针方式声明可以避免一次内存拷贝.原创 2020-11-18 23:12:28 · 261 阅读 · 0 评论 -
Go 分布式学习利器(8)-- Go的函数
1. Go语言中的函数(支持多返回值,函数可以作为入参、出参、返回值来实现 函数模版)都是值传递2. Go函数中的可变长参数 使用3. Go函数中的延迟函数 deffer使用原创 2020-11-18 22:18:29 · 226 阅读 · 0 评论 -
Go 分布式学习利器(7)-- 字符串
1. Go语言中 string的声明,unicode和utf-8的区别,string的遍历方式2. Go 语言 string的字符串分割和拼接函数Split和Join,字符串转整数Atoi和整数转字符串函数Itoa原创 2020-11-18 15:40:53 · 191 阅读 · 0 评论 -
Go 分布式学习利器(6)-- Map
1. Go语言的Map 声明,元素访问带来的0值问题,元素的遍历2. 通过Map实现函数模版 和 简单Set 的基本操作原创 2020-11-17 22:37:11 · 213 阅读 · 0 评论 -
Go 分布式学习利器(5)-- 数组和切片
1. Go语言的数组 ,多维数组 及 其初始化方式2. Go 语言 数组遍历方式3. GO语言 切片结构的用法,基本实现,以及 切片和数组的区别原创 2020-11-17 00:08:58 · 388 阅读 · 0 评论 -
Go 分布式学习利器(4)-- 条件和循环
Go语言的循环语句:没有两个小括号,且只有一个for关键字Go语言的条件语句if..else..语句1. condition 表达式结果必须为bool2. 支持表达式的变量赋值,并取结果进行判断Go的switch语句 差异较多1.条件表达式不限制为常量或者整数(可以是如上案例 字符串的形态)2. 单个case 中可以出现多个结果选项,使用逗号分隔3. Go 语言不需要break明确退出一个case4. 可以不设定switch 之后的条件表达式,这种结构与if...else...相同原创 2020-11-15 08:29:21 · 195 阅读 · 0 评论 -
Go: 分布式学习利器(3) -- Go的数据类型和运算符
Go的数据类型:1. 基本类型不允许进行隐式类型转化2.不支持指针类型的运算3. string是值类型,默认初始化值为空字符串Go的运算符:1.不支持前置 ++,--2. 支持通过==进行数组的比较(需要相同个数元素的数组才可以比较)3. Go语言支持 按位置零 &^原创 2020-11-14 14:37:51 · 230 阅读 · 0 评论 -
Go: 分布式学习利器(2)-- Go中的变量,常量 以及与其他语言变量之间的差异
通过本小节能够知道 1. go 测试程序模版2. go 的变量定义和声明方式3. go快速初始化连续常量的有趣方式原创 2020-11-12 22:22:18 · 244 阅读 · 0 评论 -
Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序
学无止境,路漫漫兮其修远。努力通过go的学习 高效完成 MIT 6.824的不同lab也借此机会了解一下:简单,高效,云计算语言,区块链语言的 go是如何成长为如此受欢迎的语言。原创 2020-11-10 23:02:01 · 477 阅读 · 0 评论