自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Erick Lv的笔记

所有的博客仅作为个人笔记

  • 博客(21)
  • 资源 (4)
  • 收藏
  • 关注

原创 Go语言常用的并发模式(上)

Confinement该模式用于处理数据限制问题,类似于生产者和消费者模式。使用channel的方式通过共享信息的方式进行。有一个协程专门负责生产,另外一个协程负责接收数据。代码中使用随机的时间模拟实际情况中耗时部分。package mainimport ( "fmt" "math/rand" "time

2018-08-29 16:09:09 1919 2

原创 Go语言sync包的Pool和Cond

Poolsync.Pool的作用是存储那些被分配了但是没有被使用,而未来可能会使用的值,以减小垃圾回收的压力,Pool不太适合做永久保存的池,更适合做临时对象池。在Go语言的程序设计中,这是为了缓解高并发是垃圾回收的压力。在并发程序中,sync.Pool会维持一个channel队列,这个队列中的资源的个数是不固定的,并发的goroutine可在该队列中获取资源。我们不知道Pool中资源回收的时...

2018-08-27 21:20:52 684

原创 Golang的io.go和io.pipe库的笔记

io.go库函数该库函数主要是一些基础的抽象接口,这些接口都是未经过实现的抽象函数。其他的一些标准库使用这些接口完成了一些相关的功能,我们在实际工程中,需要实现这些接口,同时借助其他库函数对这些的接口的扩展,来实现代码的服用。复用接口的本质上是Duck Type,即只要实现了某个接口的所有函数,就可以使用该接口表示一个对象。以下是两个个主要的抽象接口:// Reader接口用于包装...

2018-08-24 22:47:39 2788

原创 Go语言struct{}类型的channel

简介在Go语言中,有一种特殊的struct{}类型的channel,它不能被写入任何数据,只有通过close()函数进行关闭操作,才能进行输出操作。。 定义:var sig = make(chan struct{})解除方式:package mainfunc main() { var sig = make(chan struct{}) close(sig)...

2018-08-24 22:13:11 6533 2

原创 Golang的并发模式

简介主要学习3个在工程中常用的并发包,同时学习这些包常用的情景模式。runnerrunner可以给一组任务进行顺序分配,然后进行总体的时间限制。该方式确定了任务的顺序后,可以让任务顺序执行,直到时间限制到了或者任务完成或者人为中断。本例子中同时允许使用Ctrl+C进行人工中断。runner包源代码分析:package mainimport ( "os" ...

2018-08-24 14:15:48 1066

原创 Golang闭包的典型应用

简介:参考博客: - https://www.calhoun.io/5-useful-ways-to-use-closures-in-go/隔离数据使用这种方式可以隔离不想让调用者的数据,输出指定的结果;或者我们想要计算函数调用的次数。 函数计数器:// 函数计数器func counter(f func()) func() int { n := 0 r...

2018-08-24 13:18:38 4100

原创 Golang中闭包的理解

简介参考博客: - https://www.calhoun.io/what-is-a-closure/ - https://www.calhoun.io/5-useful-ways-to-use-closures-in-go/Golang的闭包函数在Golang中是“一等公民”,因此关于函数的特性必须要掌握号,闭包可以看成函数的告诫应用,是Golang高级开发的必备技能。匿...

2018-08-24 12:07:53 23948 3

原创 Golang关于channel死锁情况的汇总以及解决方案

直接读取空channel的死锁当一个channel中没有数据,而直接读取时,会发生死锁:func main() { q := make(chan int, 2) <-q}错误提示:fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.m...

2018-08-23 16:58:04 5384 1

原创 Golang处理信号

简介:该包中的所有函数,都是处理os.Signal的,os.Signal用于接受各种类型的信号,比如中断、程序终止等,这些信号的具体作用可以参考:https://golang.org/pkg/os/signal/ 中的介绍。我们根据需要使用中断,可以控制程序运行时间等。函数的使用:func Notify启动一个信号的作用,c不一定是只写的,可以是读写都行的channel,自...

2018-08-23 08:01:49 1223

原创 Golang的time包的应用

使用time包实现定时After函数类型的channel,输入值是间断时间,返回一个chan Time类型,注意是只读的。该channel直到到达指定的时间后才写入数据:func After(d Duration) <-chan Time代码实例:package mainimport ( "time "fmt")func main() { ...

2018-08-23 07:26:54 285

原创 Golang之Channel的理解与应用

博客参考自:https://golangbot.com/buffered-channels-worker-pools/基础应用使用channel的阻塞性质作为延时函数。package mainimport ( "fmt")func hello(done chan bool) { fmt.Println("Hello world goroutine !")...

2018-08-21 15:49:40 1916

原创 C++的类

构造函数析构函数C++的类成员函数如果声明成const,则表示该函数不能修改类的成员。构造函数不能声明为const,因为肯定要在构造函数里面对类进行初始化。只有当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。代码实例:class Sales_data { Sales_data() = default; Sales_data(const std::...

2018-08-21 10:23:02 188

原创 Go语言并发编程简介

并发的基础知识进程与线程的回顾总结:进程的定义:进程比较通用的几个定义:进程是程序的一次执行过程进程是一个程序及其数据在处理机上顺序执行时所发生的活动进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位从定义上可以看出,进程实际上是一个过程的描述,它强调运行的程序的这个过程,而不是像程序那样的物理实体。。进程的基本...

2018-08-20 20:52:04 561

原创 Go语言面向对象编程

系统类型为类型添加方法Go语言的类型,除了指针之外,都可以组合出自己的方法。type Integer intfunc (a Integer) Less(b Integer) bool { return a < b}func Ingeter_Less(a Integer, b Integer) bool { return a < b...

2018-08-19 16:08:39 834

原创 3.C++的函数

函数函数的参数可变形参的函数,如果函数的参数类型相同,可以使用initialize_list的标准库类型,头文件与之同名。一般操作:initializer_list<T> lst初始化initializer_list<T> lst{a,b,c}初始值,传递列表元素的副本,列表的元素是constlst2(lst)拷贝或赋值一个initializer_...

2018-08-18 10:54:22 120

原创 Go语言的flag库、os库、strconv库

flag库的用法直接解析数据根据需要传入的数据类型,直接进行数据解析。从左到右依次是:解析的命令、默认值、说明。代码实例:package mainimport ( "flag" "fmt")func main() { wordPtr := flag.String("word", "foo", "a string") numbPtr := f...

2018-08-17 20:48:20 243

原创 1. Go语言顺序程序设计,错误处理

变量声明Go语言的变量声明需要类型后置var v1 intvar v2 stringvar v3 [10]int // 数组var v4 []int // 数组切片初始化和赋值var v1 int = 10 // 显式说明,同时赋值var v2 = 10 // 自动推导v3 := 10 // 自动推导变量声明和赋...

2018-08-17 19:29:16 208

原创 2. 字符串、向量和数组

字符串、向量和数组头文件中不应该使用using的声明,因为头文件的内容会拷贝到所有引用它的文件中去,若头文件中使用了using,则每个引用该头文件的文件都会有这个声明。std::stringstd::string的初始化方式:#include <string>using std::string;string s1;string s2(s1); // ...

2018-08-17 10:24:52 109

原创 1. 变量和基本类型

变量和基本类型浮点数用double,整数一般int,超过范围用long long,知道没负数用unsigned。变量使用extern进行声明,声明不是定义,使用该关键字后,不要进行显式初始化操作,变量可以声明多次,但是只能定义一次。引用:int r2=10;int &r1=r2;r1和r2是同一个数据,只是名称不同。void*指针可以存放任意对象的地址。...

2018-08-17 08:26:40 188

原创 Ubuntu18.04构建Go语言项目

简介本文主要介绍了在Ubuntu18.04LTS的环境下,编写Go语言项目的流程,用到的IDE是GoLand。安装IDEGoland神器,可惜要收费。。。可以去淘宝买账户,或者使用网上的破解服务器。。。建议去淘宝。。。sudo snap install goland --classic安装Go语言环境推荐使用apt安装:sudo apt-get install gola...

2018-08-16 16:47:43 2755

原创 Ubuntu18.04LTS搭建nodejs环境和webStorm

前言Ubuntu18.04的apt虽然可以安装NodeJs。虽然已经安装了,但是在webstorm中一直找不到npm包,该问题一直没解决的,所以我采用了nvm的形式进行安装,最后可以使用webstom开发了。而且nvm比较方便管理,所以在这里推荐各位使用nvm的方式。具体步骤卸载之前的版本如果之前使用了apt方式安装,最好是先卸载掉,卸载命名:sudo apt remove...

2018-08-07 14:58:03 2818

code reading

Coding Reading 英文原书,主要讲述了高效阅读源代码的方式。磨刀不误砍柴工,很有学习的价值

2018-06-07

BTree数据结构课程设计C++版

BTree数据结构课程设计C++版,完整的过程和C++源代码,包括算法的源代码等。C++代码可以直接运行。

2018-01-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除