探索Golang协程实现——从v1.0开始

问题引入  提起协程,你可能会说,不就go func吗,我分分钟就能创建上万个协程。可是协程到底是什么呢?都说协程是用户态线程,这里的用户态是什么意思?都说协程比线程更轻量,协程轻量在哪里呢?  本文主要为读者介绍这些内容:Golang v1.0协程并发模型——MG模型,协程创建,协程切换,协程退出,以及g0协程,重在理解协程栈切换逻辑;为了理解协程栈,还需要简单了解下虚拟内存,函数栈帧以及简单的汇编语言;Golang v1.0协程调度逻辑;defer,panic以及recover底层实现原理。...阅读全文

51CTO博客 2021-02-03 10:43:58 mb6018e8479df66

GitHub 标星 167k!你要的优质书籍这都有,还开源!

马克西姆·高尔基曾说过,“书籍是人类进步的阶梯。”不服不行,这句话放在任何时候都是成立的。 以前,书籍少,人们获取知识的途径少,那基本上只要有书读的,都能在短时间内领先于其他人。 现在,我们再也不愁没有书读了,获取知识的信息源越来越多。但这又造成了另外一种困扰,就是我们不知道哪些书是好书,哪些书是烂书。 我家里屯有 3000 多本纸质书,但实话实说,有不少烂书,读的时候让我懊恼不已。要知道,浪费买书的钱是小事,浪费读书的时间。。。。。。听,那是 money 在碎钞机中的声音。 信息时代,生活的节...阅读全文

简书 2021-02-03 10:34:58 沉默王二

kubebuilder 入门实践

本文实践的代码示例请参考: kube-falcon, 如果觉得有所帮助, 请一定 Star, 多谢 ^_^下载与安装我们可以到 kubebuilder 在 github 上的 releases 页面, 下载支持当前系统的二进制包;kubebuilder releases 下载页面以 mac 系统为例, 具体的安装步骤如下:# 解压安装包 $ tar -zxvf kubebuilder_2.3.1_darwin_amd64.tar.gz # 本地创建安装目录 $ sudo mkdir /usr/l...阅读全文

Segmentfault 2021-02-04 15:32:33 .container .car 等

手撸golang 结构型设计模式 装饰器模式

手撸golang 结构型设计模式 装饰器模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 装饰器模式 装饰器模式(Decorator Pattern)也叫作包装器模式(Wrapper Pattern),指在不改变原有对象的基础上,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活,属于结构型设计模式。 _ 装饰器模式vs代理模式 装饰器模式就是代理模式的一个特殊应用。 装饰器模式强调自身功能的扩展。 代理模式...阅读全文

Golang--获取goroutine id 的两种实现

# Golang--获取goroutine id 的两种实现众所周知,在golang并发编程的一些情况下,需要打印一下goroutien的id号,怎么来实现呢?下面提供两种方法:1. 从runtime.Stack()方法中获取方法栈,然后从栈帧处获取;2. 获取运行时g指针,反解析出g的结构。g指针时保存在当前goroutine的TLS对象中。## 1 解析方法栈```golangfunc GoID() int { var buf [64]byte n := runtime.Stack(buf[...阅读全文

简书 2021-02-03 00:32:37 cist

gRPC

介绍 gRPC(Google Remote Procedure Calls)是一个高性能、开源、通用的RPC框架,面向移动和HTTP/2设计,是由google发布的基于Protocol Buffers的RPC框架。 gRPC基于HTTP/2标准设计,带来诸如双向流、头部压缩、单TCP连接上的多复用请求等等特性。省电且省空间占用。 gRPC 关键词 HTTP/2、Protocol Buffers 教程 gRPC:https://grpc.io/docs/tutorials/basic/go.htm...阅读全文

简书 2021-02-03 00:32:37 KevinL水杉

2021-02-02:力扣424. 替换后的最长重复字符。如何用代码实现?

福哥答案2021-02-02: 双指针 我们可以枚举字符串中的每一个位置作为右端点,然后找到其最远的左端点的位置,满足该区间内除了出现次数最多的那一类字符之外,剩余的字符(即非最长重复字符)数量不超过 kk 个。 这样我们可以想到使用双指针维护这些区间,每次右指针右移,如果区间仍然满足条件,那么左指针不移动,否则左指针至多右移一格,保证区间长度不减小。 虽然这样的操作会导致部分区间不符合条件,即该区间内非最长重复字符超过了 kk 个。但是这样的区间也同样不可能对答案产生贡献。当我们右指针移动到尽...阅读全文

简书 2021-02-03 00:32:37 福大大架构师每日一题

golang 环境安装及其配置

安装 https://studygolang.com/dl 下载mac版本 点击下载好的 pkg 一路安装便安装到了 /usr/local/go 目录下 添加环境变量 vim ~/.bash_profile 最下面条件两行 export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin image.png go mod 配置 参考 https://studygolang.com/articles/32046 首先开启 go module (go...阅读全文

简书 2021-02-03 00:32:37 万大宝_我兜里有糖

从log4j2的角度看golang的zap

序本文主要从log4j2的角度对zap做一下小结log4j2配置从配置文件上看,分为如下几个部分:propertiesappendersSizeBasedTriggeringPolicyTimeBasedTriggeringPolicymdcfilterpattern layoutpoliciesrollover strategyloggersrootloggerasync loggerasync root使用在使用上主要是考虑几点:log的输入mdc的输入kv结构的输入tracing注入log...阅读全文

51CTO博客 2021-02-02 20:31:45 mb6018e67ba1c26

golang 实现 RSA 的加密解密

RSA 介绍RSA 由 Ron Rivest, Adi Shamir 和 Lennard Adleman 三位大佬在 1977 年提出的算法。RSA 加密算法是一种非对称机密算法, 对极大整数做因数分解的难度决定了RSA算法的可靠性。公钥与私钥的产生选取两个大的质数: p 和 q计算 n = p * q计算小于 n 并且与 n 互质的整数的个数, 使用欧拉公式可以计算ο(n)=(p−1)∗(q−1)随机选择加密的私钥 e, 使 1 < e < ο(n), 并且 e 与 ο(n) 互质使用欧几里得...阅读全文

51CTO博客 2021-02-02 20:19:31 mb6018e67ba1c26

Go并发处理

写了一个web接口,想高并发的请求这个接口,进行压力测试,所以服务端就实现了一个线程池。代码从网上理解了之后写的。代码实例简单的介绍: 首先实现一个Job接口,只要有方法实现了Do方法即可 定义个分发器结构体,主要是WorkPool线程池,用于存储Worker的JobChannel init的时候,先初始化一个JobQueue队列,其他的函数调用这个线程池的时候,把任务放在这个队列即可。 然后Run的时候,创建多个Worker,起初的时候,woker会把自身的JobChannel先注册到线程池w...阅读全文

51CTO博客 2021-02-02 19:51:09 mb6018e67ba1c26

Go - 实现项目内链路追踪

为什么项目内需要链路追踪?当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。从图中可以清晰的看出他们之间的调用关系,通过一个例子说明下链路的重要性,比如对方调我们一个接口,反馈在某个时间段这接口太慢了,在排查代码发现逻辑比较复杂,不光调用了多个三方接口、操作了数据库,还操作了缓存,怎么快速定位是哪块执行时间很长?不卖关子,先说下本篇文章最终实现了什么,如果感兴趣再继续往下看。实现了通过记录如下参数,来进行问题定位,关于每个参数的结构在下...阅读全文

51CTO博客 2021-02-02 19:46:57 mb6018e67ba1c26

Go - 实现项目内链路追踪

为什么项目内需要链路追踪?当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。从图中可以清晰的看出他们之间的调用关系,通过一个例子说明下链路的重要性,比如对方调我们一个接口,反馈在某个时间段这接口太慢了,在排查代码发现逻辑比较复杂,不光调用了多个三方接口、操作了数据库,还操作了缓存,怎么快速定位是哪块执行时间很长?不卖关子,先说下本篇文章最终实现了什么,如果感兴趣再继续往下看。实现了通过记录如下参数,来进行问题定位,关于每个参数的结构在下...阅读全文

51CTO博客 2021-02-02 19:46:37 mb6018e67ba1c26

模块一 GO语言基础知识-程序实体的那些事(上)

我已经为你打开了 Go 语言编程之门,并向你展示了“程序从初建到拆分,再到模块化”的基本演化路径。一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会把车开到模块化编程的道路上。我相信,等你真正理解了这个过程之后,也会驾轻就熟的。上述套路是通用的,不是只适用于 Go 语言。但从本篇开始,我会开始向你介绍 Go 语言中的各种特性以及相应的编程方法和思想。我在讲解那两种源码文件基本编写方法的时候,声明和使用了一些程序实体。你也许已经若有所觉,也许还在云里雾里。没关系,...阅读全文

51CTO博客 2021-02-02 19:44:27 mb6018e67ba1c26

利用Go实现快看漫画网页版自动点击“下一话”,中间无需手动操作,但有一点疑惑,望大佬们解答。

用手机点快看漫画翻页不舒服,搞一个用Go写的自己翻页,但只能在电脑上运行,大家看一看应该就明白了 当然很粗糙,大家不要笑话,我是新手,最近才入手Go 但是有一个问题需要大佬们帮忙解答一下 我本来想用fmt.scanln()来实现按任意键回车继续的,但是实现不了,他会自己跳过。 ``` package main import ( "fmt" "os" "github.com/go-vgo/robotgo" hook "github.com/robotn/goh...阅读全文

Go语言中文网 2021-02-02 18:02:15 llh1070933798

Gfast v1.2.1 发布

更新内容:兼容性修复,兼容gf框架v1.15.0修复添加定时任务名称字段流程审批添加业务标题字段工作流功能修复完善,流程(同步模式)bug修复获取所有下级流程优化,添加已审批流程节点获取方法添加流程图预览功能源码下载地址:https://gitee.com/tiger1103/gfast阅读全文

Go语言中文网 2021-02-02 17:36:32 kocie