摘要: go控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context WaitGroup这种方式是控制多个goroutine同时完成 channel 通知,根据channel阻塞的原理来进行goroutine控制 context 在go服务器中,对于每个请求的request都是在单独的 阅读全文
posted @ 2019-09-12 17:49 君子不徒语 阅读(787) 评论(0) 推荐(0) 编辑
摘要: go自带log包 封装logger 一: 封装logger二: go 切割日志文件 阅读全文
posted @ 2019-09-10 17:20 君子不徒语 阅读(866) 评论(0) 推荐(0) 编辑
摘要: 我们知道go的结构体有点类的感觉,可以有自己的属性和方法。 但是由于结构体的属性都是有零值的,我们在创建结构体的时候并不需要设置这些属性的值就能创建,但是这样创建的结构体往往没有什么实用价值。 我们可以自定义一个构造方法,然后使用这个方法来构造此结构体 阅读全文
posted @ 2019-09-10 15:00 君子不徒语 阅读(236) 评论(0) 推荐(0) 编辑
摘要: select语句用于在多个发送/接收信道操作中进行选择。select语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select会随机地选取其中之一执行。该语法与switch类似,所不同的是,这里的每个case语句都是信道操作。 假设我们有一个关键性应用,需要尽快地把输出返回 阅读全文
posted @ 2019-09-10 10:51 君子不徒语 阅读(1823) 评论(0) 推荐(0) 编辑
摘要: 信道产生的动机:在 Go 语言中,一个最常见的也是经常被人提及的设计模式就是不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存,信道就是为此而生 信道的声明: 方法1:var a chan int 信道的零值为nil 方法2:a :=make(chan,int) 通过信道发送接收消息: 阅读全文
posted @ 2019-09-09 17:24 君子不徒语 阅读(512) 评论(0) 推荐(0) 编辑
摘要: Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。 Go 协程相比于线程的优势 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 阅读全文
posted @ 2019-09-09 15:03 君子不徒语 阅读(730) 评论(0) 推荐(0) 编辑
摘要: 基本模式fmt 方法可以大致分为 print, scan两类, 根据基础方法可以构建特定方法。 Print 将参数写入字符串或io.writer scan 从字符串或 io.Reader 读取指定数据, 并输出 PrintPrint 方法的几种模式 基础模式: [name] Print 返回默认格式 阅读全文
posted @ 2019-09-09 14:04 君子不徒语 阅读(1121) 评论(0) 推荐(0) 编辑
摘要: bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销。实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行。当发起一次读写操作时,会首先尝试从缓冲区获取数据;只有当缓冲区没有数据时,才会从数据源获取数据更新缓冲。 Reader可 阅读全文
posted @ 2019-09-05 15:52 君子不徒语 阅读(4163) 评论(0) 推荐(0) 编辑
摘要: // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情// 并且始终成功返回。var Discard io.Writer = devNull(0) // ReadAll 读取 r 中的所有数据,返回读取的数据和遇到的错误。// 如果读取成功,则 err 返回 阅读全文
posted @ 2019-09-05 14:22 君子不徒语 阅读(365) 评论(0) 推荐(0) 编辑
摘要: go 文件读写有很多方式 ioutil读文件 ioutil写文件 使用os包打开文件 将文件绑定在二进制文件中 packr 会把静态文件(例如 .txt 文件)转换为 .go 文件,接下来,.go 文件会直接嵌入到二进制文件中。packer 非常智能,在开发过程中,可以从磁盘而非二进制文件中获取静态 阅读全文
posted @ 2019-09-04 17:41 君子不徒语 阅读(8187) 评论(0) 推荐(0) 编辑