![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
無極樂時
万物皆数
展开
-
设计模式及说明
原创 2020-12-13 13:05:14 · 140 阅读 · 0 评论 -
gorilla/mux 翻译
mux https://github.com/gorilla/muxgorilla / mux实现了一个请求路由器和分发器,用于将传入的请求与其各自的处理程序进行匹配。名称mux代表“ HTTP请求多路复用器”。 与标准的http.ServeMux一样,mux.Router将传入请求与已注册路由列表进行匹配,并为与URL或其他条件匹配的路由调用处理程序。 主要特点是:它实现了http.Handler接口,因此与标准的http.ServeMux兼容。可以基于URL主机,路径,路径前缀,方案,标头和查翻译 2020-08-18 23:22:37 · 254 阅读 · 0 评论 -
Fasthttp里面 goroutine pool 实现原理
应用实例 源码分析 调用链路分析 workerPool 的 start 和 stop workerPool 的 Serve 逻辑架构图这篇文章主要讲解fasthttp 这个http库关于协程池做的优化原理;应用实例fasthttp 是一个非常优秀的web server框架,github上的benchmark号称比官方的net/http快10倍以上。fasthttp用了很多黑魔法。我们今天通过源码来看一看它的goroutine pool的实现。这里还是以一个例子开头来说明...转载 2020-08-18 23:16:50 · 335 阅读 · 0 评论 -
raft协议-选举、日志复制、网络分区、快照
raft算法是一种用于管理复制日志的一致性算法,并且易于理解。主要从以下几个方面来介绍raft协议:leader的选举 日志的复制 网络分区的场景 日志压缩与快照 linearizable语义 只读请求 leader节点的转移leader的选举: raft协议的工作模式是一个leader节点和多个follower节点的模式。每个节点维护了一个状态机,并且有三种状态:leader状态、follower状态、candidate状态。以下是每个状态的节点负责的工作:lea...原创 2020-05-21 21:48:01 · 1109 阅读 · 0 评论 -
golang文章整理
coder_learn只争朝夕,不负韶华!golang????:《Go语言编程入门与实战技巧》-黄靖钧《Go语言核心编程》-李文塔《Go编发编程实战》-郝林《Go语言编程》-许式伟《Go程序设计语言》-译本 Go语言圣经《Go语言学习笔记》-雨痕《Go 语言设计与实现》《Go语言高级编程》- 柴树杉,曹春晖《go语言101》mysql :mysql45讲mysql必知必会计算机组成原理:深入理解计算机系统深入浅出计算机组成原理(极客时间)算法:数据结原创 2020-05-19 22:18:39 · 435 阅读 · 0 评论 -
goland历史版本下载地址
https://www.jetbrains.com/zh-cn/go/download/other.html原创 2020-05-17 07:27:10 · 2058 阅读 · 0 评论 -
Go 语言调度(三): 并发
介绍当我解决问题时,尤其是新问题,我不会一上来就想着能不能使用并发来处理。我会首先想出一个顺序执行的解决方案。然后在可读性和技术评审后,我会开始考虑并发处理能不能让问题得到更快的解决。有时很显然并发是很合适的,但有时候并不那么明显。第一篇文章,我讲解了系统调度器的机制和原理,我相信这对写一个多线程代码是重要的。第二篇文章我讲解了 Go 语言调度器的机制,对如何 Go 语言写出并发代码是重要...转载 2019-11-30 17:32:00 · 195 阅读 · 0 评论 -
Go 语言调度(二): goroutine 调度器
介绍上一篇文章我对操作系统级别的调度进行了讲解,这对理解 Go 语言的调度器是很重要的。这篇文章,我将解释下 Go 语言的调度器是如何工作的。依旧专注在上层抽象的基本概念上,不深入到具体如何实现的,因为 Go 调度器是非常复杂的而且内部机制的一些细节是无关紧要的。重要的是我们要对 goroutine 是如何被调度和工作的有一个简单的心理模型。这对我们做工程决策时有很大的帮助。程序启动当...转载 2019-11-30 17:31:17 · 181 阅读 · 0 评论 -
Go 语言调度(一): 系统调度
调度相关的一系列文章主要参考 Scheduling In Go : Part I - OS Scheduler 翻译来的。因为在学习的过程中偶然发现,感觉总结得蛮好的,就不造轮子了,干脆直接翻译过来作为自己的学习笔记了,英文好的建议直接阅读原文。介绍Go 调度器使你编写的 Go 程序并发性更好,性能更高。这主要是因为 Go 调度器很好的运用了系统调度器的机制原理。但是,如果你不了解调...转载 2019-11-30 17:29:51 · 212 阅读 · 0 评论 -
Go 语言内存管理(二):Go 内存管理
介绍了解操作系统对内存的管理机制后,现在可以去看下 Go 语言是如何利用底层的这些特性来优化内存的。Go 的内存管理基本上参考 tcmalloc 来实现的,只是细节上根据自身的需要做了一些小的优化调整。Go 的内存是自动管理的,我们可以随意定义变量直接使用,不需要考虑变量背后的内存申请和释放的问题。本文意在搞清楚 Go 在方面帮我们做了什么,使我们不用关心那些复杂内存的问题,还依旧能写出较...转载 2019-11-30 17:20:41 · 365 阅读 · 0 评论 -
Go 语言内存管理(一):系统内存管理
介绍要搞明白 Go 语言的内存管理,就必须先理解操作系统以及机器硬件是如何管理内存的。因为 Go 语言的内部机制是建立在这个基础之上的,它的设计,本质上就是尽可能的会发挥操作系统层面的优势,而避开导致低效情况。操作系统内存管理其实现在计算机内存管理的方式都是一步步演变来的,最开始是非常简单的,后来为了满足各种需求而增加了各种各样的机制,越来越复杂。这里我们只介绍和开发者息息相关的几个机...转载 2019-11-30 17:18:16 · 131 阅读 · 0 评论 -
通过计数的方式来等待goroutine的完成
func makeThumnails(filename []string){ ch := make(chan struct{}) for _,f := range filenames{ go func(f string){ thumbnail.ImageFile(file)//忽略了可能的错误 //每个goroutine操作完成都发...原创 2019-11-16 14:38:30 · 132 阅读 · 0 评论 -
IPC (INTER PROCESS COMUNICATION)
原创 2019-11-03 17:16:26 · 81 阅读 · 0 评论 -
go goroutine之间的调度-select
package mainimport ( "fmt" "time")//生成数据func generator() chan int { out := make(chan int) go func() { i := 0 for{ //向out中发送数据 out <- i i++ } }() //开完 goroutine 同时return ...原创 2019-11-02 16:36:55 · 555 阅读 · 0 评论 -
go 传统同步机制-mutex
package mainimport ( "fmt" "sync" "time")/*传统的同步机制很少使用到,因为传统的同步机制都是用共享内存来交换数据的,所以才需要mutxt cond去保护*/type atomicInt struct { value int lock sync.Mutex //锁}/*atomic 在多个goroutine之间是安全的*///互斥...原创 2019-11-02 16:35:37 · 195 阅读 · 0 评论 -
go 接口的使用者和实现者
原创 2019-10-30 17:38:54 · 262 阅读 · 0 评论 -
go map
package mainimport "fmt"func main() { //如果获取不再map中的key,则会返回 zero value m := map[string]string{ "name":"ccmouse", "course":"golang", "site":"imooc", "qulity":"ok", } //使用make创建map ...原创 2019-10-29 22:05:49 · 92 阅读 · 0 评论 -
go slice
package mainimport "fmt"func updateSlice(s []int){ s[0] = 100}func main() { arr := [...]int{0,1,2,3,4,5,6,7} fmt.Println("arr[2:6]",arr[2:6]) fmt.Println("arr[:6]",arr[:6]) fmt.Println("a...原创 2019-10-29 22:04:59 · 77 阅读 · 0 评论 -
go array
package mainimport "fmt"func printArray(arr [5]int) { arr[0] = 100 for i,v := range arr { fmt.Println(i,v) }}//使用指针来调用func printArrayP(arr *[5]int) { arr[0] = 100 for i,v := range arr ...原创 2019-10-29 22:03:58 · 142 阅读 · 0 评论 -
go 指针
package mainimport "fmt"func swap(a,b int){ b,a = a,b}//指针func swappointer(a,b *int){ *b, *a = *a, *b}//此种方式比使用指针更好func swapp(a,b int)(int,int){ return b,a}func main() { a,b := 3,4...原创 2019-10-29 22:00:21 · 71 阅读 · 0 评论 -
go func
package mainimport ( "bufio" "fmt" "os" "strconv")//forfunc convertToBin(n int)string{ resutl := "" //省略起始条件 for ; n >0;n /=2{ lsb :=n % 2 resutl = strconv.Itoa(lsb)+resutl } re...原创 2019-10-29 21:59:50 · 99 阅读 · 0 评论 -
go for
package mainimport ( "bufio" "fmt" "os" "strconv")//forfunc convertToBin(n int)string{ resutl := "" //省略起始条件 for ; n >0;n /=2{ lsb :=n % 2 resutl = strconv.Itoa(lsb)+resutl } re...原创 2019-10-29 21:59:19 · 319 阅读 · 0 评论 -
go 条件语句
package mainimport ( "fmt" "io/ioutil")//条件语句func read1(){ const filename = "abc.txt" var contents, err = ioutil.ReadFile(filename) if err !=nil{ //当错误信息不为0 的时候,输出错误信息 fmt.Println(err)...原创 2019-10-29 21:58:29 · 93 阅读 · 0 评论 -
go 常量
package mainimport ( "fmt" "math")//常量的定义func consts(){ const filename = "abc,text" const a,b = 3,4 //常量相当于是文本替换,没有定义类型的时候,可以是int也可以是float var c int c = int(math.Sqrt(a*a + b*b)) fmt.Pri...原创 2019-10-29 21:57:42 · 93 阅读 · 0 评论