go语言
文章平均质量分 56
普通网友
这个作者很懒,什么都没留下…
展开
-
go语言学习笔记17 网络编程02
ioutil.ReadAll(r.Body) 读取数据只能读取1次原创 2021-09-11 14:25:04 · 289 阅读 · 0 评论 -
golang 中的 匿名函数和 闭包
匿名函数是一种没有函数名的函数,即定义即使用;闭包作为一种携带状态的函数,我们可以简单地将它理解为“对象”,因为它同时具备状态和行为。原创 2021-08-15 17:48:07 · 261 阅读 · 0 评论 -
go语言知识点整理09
1.go slice和map的应用sh原创 2021-06-06 17:29:20 · 127 阅读 · 0 评论 -
go语言知识点整理08
=和:=的区别?= 是赋值, := 是声明变量并赋值。原创 2021-05-30 14:51:56 · 113 阅读 · 2 评论 -
golang 源码分析06 Sync.Map
对于readOnly的map,amended = false,代表不可变先看Load方法,查询1.先从readOnly只读的map获取,如果获取不到,并且dirtyMap有数据,那么就lock解锁,并且双重检查,readOnly真没有2.dirtyMap有数据,就获取数据e,然后调用unlock解锁,返回数据+++++++++++++++++++++++++++++++++++++++++++++++++++++++++...原创 2021-05-29 16:56:23 · 162 阅读 · 1 评论 -
go语言知识点整理07 锁的使用 && Sync.map
在slice中len和cap时是两个完全不同的概念,len代表了元素个数,cap说明slice空间可以容纳多少个元素。在对 slice 进行 append 操作时, 如果 cap 容量足够,则直接在当前slice后面附加上添加的值,并将 len 修改为当前元素的个数。如果 cap 容量不够,则重新创建一个slice, 并将之前的slice 复制到新的slice中然后将添加的值附加到新的slice上。当 slice 出发扩容操作时,如果之前 slice 的cap小于 2048 时,每次扩容为之前容量的两原创 2021-05-28 19:57:00 · 356 阅读 · 0 评论 -
go语言知识点整理06 并发相关 cond
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++cond.go 源码分析cond 实现了一个条件变量,一堆协程等待发一个事件通知的汇合点每个Cond都有一个关联的Locker,当调用Wait 方法的时候,必须持有这个锁,才能修改condition下面来看核心方法Waitwait方法原...原创 2021-05-24 23:08:54 · 128 阅读 · 0 评论 -
golang 源码分析05 Mutex
上图是Mutex的结构体和locker接口方法定义Mutex的公平性,两种操作模式 正常normal和饥饿starvation互斥量可分为两种操作模式:正常和饥饿。在正常模式下,等待的goroutines按照FIFO(先进先出)顺序排队,但是goroutine被唤醒之后并不能立即得到mutex锁,它需要与新到达的goroutine争夺mutex锁。因为新到达的goroutine已经在CPU上运行了,所以被唤醒的goroutine很大概率是争夺mutex锁是失败的。出现这样的情况时候..原创 2021-05-24 17:58:41 · 90 阅读 · 1 评论 -
go语言知识点整理05 并发相关 mutex
学习过操作系统的都知道程序有临界区这个概念,临界区就是程序片段访问临界资源的那部分代码,临界区同一时刻只能有一个线程进行访问,其他线程需要访问的话必须等待资源空闲。那么一般编程语言都会使用锁来进行临界区访问控制。golang主要有两种锁:互斥锁和读写锁互斥锁Mutex:Mutex 用于提供一种加锁机制(Locking Mechanism),保证同一时刻只有一个goroutine在临界区运行。互斥锁定义如下:读写锁RWMutex:读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分原创 2021-05-23 16:18:26 · 169 阅读 · 0 评论 -
golang 源码分析04 channel
https://www.cnblogs.com/ricklz/p/13813201.html看golang的源码 chan.go 即channel的实现 不要通过共享内存来通信,⽽应通过通信来共享内存。 这是更⾼层次的并发编程哲学(通过管道来传值是Go语⾔推荐的做法)。虽然像引⽤计数这类简单的并 发问题通过原⼦操作或互斥锁就能很好地实现,但是通过Channel来控制访问能够让你写出更简洁正确的程序。channelGolang中使用 CSP中 channel 这个概念。channel ...原创 2021-05-18 23:39:59 · 158 阅读 · 2 评论 -
golang 源码分析03 GoRoutine 下
继续看下核心方法handoff原创 2021-05-13 22:01:09 · 239 阅读 · 0 评论 -
golang 源码分析02 GoRoutine 中
协程调度器底层实现( G、M、P)G:Goroutine的缩写,一个G代表了对一段需要被执行的Go语言代码的封装M:Machine的缩写,一个M代表了一个内核线程P:Processor的缩写,一个P代表了M所需的上下文环境简单的来说,一个G的执行需要M和P的支持。一个M在与一个P关联之后形成了一个有效的G运行环境【内核线程 + 上下文环境】。每个P都会包含一个可运行的G的队列 (runq)。M (machine):M是machine的头文字, 在当前版本的golang中等同于系..原创 2021-05-11 22:59:35 · 124 阅读 · 1 评论 -
golang 源码分析01 GoRoutine 上
一、Golang简介1.1概述Golang语言是Google公司开发的新一代编程语言,简称Go语言,Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序。 Go 编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行时反射。而他最广为人知的特性便是语言层面上对多核编程的支持,他有简单的关键字go来实现并行,就像下面这样:Go的并行单元并不是传统意义上的线程,线程切换需要很大的上下文,这种切换消耗了大量CPU时间,而Go原创 2021-05-08 20:09:39 · 233 阅读 · 0 评论 -
go语言知识点整理04
2、go struct能不能比较 因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型4、select可以用于什么,常用语gorotine的完美退出golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作5、context包的用途Context通常被译作上下文,它是一个比较抽象的概念,其本质,是【上下...原创 2021-05-08 17:38:15 · 173 阅读 · 0 评论 -
go语言知识点整理03
1.【初级】下面属于关键字的是()A. funcB. defC. structD. class参考答案:ACgo语言25个关键字总结var和const :变量和常量的声明 var varName type 或者 varName : = value package and import: 导入 func: 用于定义函数和方法 return :用于从函数返回 defer someCode :在函数退出之前执行 go : 用于并行 select 用于选择不同类...原创 2021-04-28 23:19:01 · 480 阅读 · 0 评论 -
kubernetes 学习06 存储
K8s 支持有状态的,所以需要存储能力原创 2021-04-12 23:45:11 · 66 阅读 · 0 评论 -
kubernetes 学习05 Service
从etcd中获取变化,然后写入到本地iptablesIngress 需要绑定域名,客户端访问nginx,反向代理到后端的service两个协程直接沟通原创 2021-04-10 20:57:28 · 72 阅读 · 0 评论 -
kubernetes 学习02
V2可以回滚到v1,并且rs-1 停用,rs启用原创 2021-04-06 00:48:16 · 64 阅读 · 0 评论 -
kubernetes 学习01
docker 是基于paas平台 ,platform as a servicePod 是K8s管理的最小单位scheduler把任务分发到不同的node节点原创 2021-04-06 00:27:25 · 82 阅读 · 0 评论 -
go语言知识点整理02
Golang面试问题汇总:1. Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量?Golang中Goroutine 可以通过 Channel 进行安全读写共享变量。2. 无缓冲 Chan 的发送和接收是否同步?ch := make(chan int) 无缓冲的channel由于没有缓冲发送和接收需要同步.ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步. channel无缓冲时,发送阻塞直到数据被接收,接收阻塞直到读到原创 2021-04-05 22:34:58 · 255 阅读 · 0 评论 -
go语言知识点整理01
1.go语言中切片的扩容机制是什么?如果切片的容量小于1024个元素,那么扩容的时候slice的cap就在当前容量的基础上翻番,乘以2;一旦元素个数超过1024个元素,增长因子就变成1.25,即每次增加当前容量的四分之一。如果扩容之后,还没有触及原数组的容量,那么,切片中的指针指向的位置,就还是原数组,如果扩容之后,超过了原数组的容量,那么,Go就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。即大致可以表述如下:当向切片中添加数据时,如果没有超过容量,直接添加,如果.原创 2021-03-28 23:40:46 · 170 阅读 · 0 评论 -
go语言垃圾回收 学习02
https://blog.csdn.net/weixin_45583158/article/details/100143135?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMach原创 2021-03-14 23:06:25 · 73 阅读 · 0 评论 -
go 语言垃圾回收 学习01
转载什么是垃圾回收?曾几何时,内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种办法:内存泄露检测工具。这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起到辅助作用。 智能指针。这是 c++ 中引入的自动内存管理方法原创 2021-03-14 22:23:07 · 154 阅读 · 0 评论 -
go语言学习笔记16 序列化 && 反射
反射的本质是运行时运行结果如下:Kind的类别比Type更大原创 2021-02-10 16:20:22 · 90 阅读 · 0 评论 -
go语言 电商秒杀项目01
原创 2021-01-10 17:20:30 · 386 阅读 · 1 评论 -
go语言 docker学习01
先安装go然后是docker build然后运行docker调用docker run -it centos,会进入centos的系统输入exit,就可以回到本机可以删除docker container,使用下面的命令docker container rm dockerId下面可以列出所有container的id删除所有container...原创 2021-01-06 23:30:57 · 81 阅读 · 1 评论 -
go语言 beego 框架学习01
官网网站https://beego.me/https://beego.me/docs/intro/go get github.com/beego/beehttps://www.jianshu.com/p/6189f8e49f84mac安装beego原创 2021-01-03 22:51:47 · 120 阅读 · 0 评论 -
go语言 gin框架学习02
P184 gin数据解析和绑定表单数据解析和绑定,代码如下URI 数据解析和绑定P185 gin各种渲染P186 重定向http://127.0.0.1:8080/redirecthttp://127.0.0.1:8080/longAsynchttp://127.0.0.1:8080/longSyncP187 gin中间件浏览器执行...原创 2021-01-02 22:51:12 · 97 阅读 · 1 评论 -
go语言 gin框架学习01
https://www.cnblogs.com/xinliangcoder/p/11200332.htmlgo get -u -v github.com/gin-gonic/gin原创 2020-12-31 23:05:51 · 117 阅读 · 1 评论 -
极客时间 go并发实战课笔记02 Mutex 详细分析
02 | Mutex:庖丁解牛看实现调用 Lock 请求锁的时候,通过 xadd 方法进行 CAS 操作(第 24 行),xadd 方法通过循环执行 CAS 操作直到成功,保证对 key 加 1 的操作成功完成。如果比较幸运,锁没有被别的 goroutine 持有,那么,Lock 方法成功地将 key 设置为 1,这个 goroutine 就持有了这个锁;如果锁已经被别的 goroutine 持有了,那么,当前的 goroutine 会把 key 加 1,而且还会调用 semacquir原创 2020-11-15 22:34:30 · 1015 阅读 · 0 评论 -
极客时间 go并发实战课笔记01 并发基础
线程、进程、协程的区别进程、线程、协程对比通俗描述有一个老板想要开个工厂进行生产某件商品(例如剪子)他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的 为了能够生产剪子而准备的资源称之为:进程只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程这个老板为了提高生产率,想到3种办法:1 在这条生产线上多招些工人,一起来做剪子,这样效率是成倍増长,即单进程 多线程.原创 2020-11-15 16:19:16 · 2558 阅读 · 0 评论 -
go语言培训课程笔记15 kafka && zookeeper && logAgent && etcd && ES
logAgent的实现+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++原创 2020-09-26 18:30:46 · 109 阅读 · 0 评论 -
go语言培训课程笔记14 Module && Context
P147 context原创 2020-09-20 08:19:06 · 144 阅读 · 0 评论 -
go语言培训课程笔记13 Mysql && Redis && kafka
查询单条数据查询多条记录查询,更新和删除原创 2020-09-14 00:17:28 · 122 阅读 · 0 评论 -
go语言学习笔记12 网络编程01
113 TCP 服务端开发原创 2020-09-06 22:26:06 · 93 阅读 · 0 评论 -
go语言学习笔记11 workpool && select && 并发锁 && atomic
P101 select 学习select 获取值,从任意通道ch获取值,不按照顺序P107 互斥锁原创 2020-09-06 15:17:50 · 97 阅读 · 0 评论 -
go语言学习笔记10 协程 && 通道
p93 并发编程介绍go的并发程序,执行时默认把cpu跑满,会充分压榨cpu资源m个goroutine 分配给n个操作系统线程执行原创 2020-09-06 08:42:37 · 154 阅读 · 0 评论 -
go语言培训课程笔记09 文件
执行结果如下还可以使用ioUtil读取文件P72 文件写入然后目录下生成文件,内容已经写入到文件还可以使用bufio 写入文件P73 使用bufio 获取用户输入P77 文件中间插入内容P78 时间time包P87 反射学习...原创 2020-09-05 10:55:12 · 111 阅读 · 0 评论 -
go语言培训课程笔记08 接口
P65 接口的定义和实现原创 2020-09-01 09:45:11 · 114 阅读 · 0 评论 -
go语言学习笔记07 结构体 && 方法
P49 结构体P50 匿名结构体P51 结构体指针和结构体初始化new和make都是用来申请内存的,new是用来给基本的数据类型申请内存结构体字段内存是连续的P52 结构体构造函数...原创 2020-08-30 16:45:39 · 177 阅读 · 0 评论