golang协程设计及调度原理
目录一、协程设计-GMP模型1.工作线程M2.逻辑处理器p3.协程g4.全局调度信息schedt5.GMP详细示图二、协程调度1.调度策略获取本地运行队列获取全局运行队列协程窃取2.调度时机...
目录一、协程设计-GMP模型1.工作线程M2.逻辑处理器p3.协程g4.全局调度信息schedt5.GMP详细示图二、协程调度1.调度策略获取本地运行队列获取全局运行队列协程窃取2.调度时机...
目录前言Go语言互斥锁设计实现mutex介绍Lock加锁初始化状态自旋抢锁准备期望状态通过CAS操作更新期望状态解锁非阻塞加锁总结前言当提到并发编程、多线程编程时,都会在第一时...
目录一、获取时间1.1 获取当前时间1.2 获取之前/之后的时间获取1分钟之前的时间戳获取一小时之前的时间获取1小时后的时间二、获时间戳2.1 获取当前时间戳2.2 时间转时间戳2...
目录前言一、goctl 的由来1. goctl 的诞生2. 为什么需要 goctl?3. 怎么理解开发规范?4. 怎么理解工程效率?二 、goctl 的安装及功能介绍1. 介绍2. 安装go get/installdocker3....
目录何时使用单体 RESTful 服务商城单体 RESTful 服务单体服务实现Mall API 定义账号模块 API 定义订单模块 API 定义商品模块 API 定义生成单体服务实现业务逻辑总结何时使...
目录特别说明go fuzzing 是什么go fuzzing 怎么用运行 fuzzing testsgo-zero 的最佳实践1. 定义 fuzzing arguments2. 怎么写 fuzzing target3. 失败 case 如何打印输入4....
目录tcp粘包现象代码重现tcp粘包问题处理方法tcp粘包产生的原因这里就不说了,因为大家能搜索TCP粘包的处理方法,想必大概对TCP粘包有了一定了解,所以我们直接从处理思路开始讲...
目录1.背景2.strchecker介绍3.结论1.背景在大型项目开发过程中,经常会遇到打印大量日志,输出信息和在源码中写注释的情况。对于软件开发来说,我们一般都是打印输出英文的日志(主...
golang 中的协程使用非常方便,但是协程什么时候结束是一个控制问题,可以用 select 配合使用。首先声明,golang 使用并不熟悉,本文仅仅是记录使用过程中遇到的一些坑。子协程和父...
目录需求方案1:配置文件管理方案2:集中式管理配置需求开发过程中开发者经常面对的一个需求就是:一个项目可能会在不同的环境下运行,本地开发环境、测试环境、灰度环境、生产环境...
目录编译时数组类型解析ArrayTypetypes2.Arraytypes.Array编译时数组字面量初始化编译时数组索引越界检查运行时数组内存分配总结编译时数组类型解析ArrayType数组是内存中...
目录Stream GrpcStream Grpc演示BookListStreamCreateBookStreamFindBookByIdStreamStream Grpc在我们单次投递的数据量很大的时候,比如传输一个二进制文件的时候,数据包过大,...
目录前言:什么是内联?为什么内联很重要?函数调用的开销基本知识Go 中的开销Go 里的优化改善优化的机会进行内联优化不允许内联允许内联这些改进从何而来?内联的限制总结前言:这是...
目录协同开发时本地测试GoFrame如何优雅的获得方法名巧用中间件中间件在登录之后设置关键信息到context上下文中业务逻辑直接通过context直接取值case when总结协同开发时本...
目录1. iocgo简介2. iocgo如何使用2.1 iocgo包的安装2.2 使用示例与说明2.2.1 最简单的例子:2.22. Register 的选项2.2.3. 注册实例2.2.4. 获得实例2.2.5. 结构体参数和字段...
目录MPG模型通道的特性首先就是进程、线程、协程讲解老三样。进程: 本质上是一个独立执行的程序,进程是操作系统进行资源分配和调度的基本概念,操作系统进行资源分配和调度的...
目录切片的解析切片的初始化字面量初始化make初始化切片的截取切片的复制切片的扩容总结切片的解析当我们的代码敲下[]时,便会被go编译器解析为抽象语法树上的切片节点, 被初...
目录前言原理详解pending2ReadyScriptready2UnackScriptunack2RetryScriptackconsume前言在之前探讨延时队列的文章中我们提到了 redisson delayqueue 使用 redis 的有序集...
目录简介为什么需要cobra基本概念安装命令行工具入门实践命令构成新增命令如何显示自己的命令用法总结简介Github:https://github.com/spf13/cobraStar:26.5KCobra是一个用Go...
目录1.Quiz2.Answer3.ResolvingConclusion1.Quiz有如下一个例子:package mainimport ( "encoding/json" "fmt" "time")type RecordBrief struct { time.Time ID int}func mai...
目录Go本地测试的思路解耦no情绪 & todolist沟通的重要性及时沟通找对人总结Go本地测试的思路我习惯在开发过程中及时测试自己开发的功能模块,这样能及时发现问题,节省后期功...
目录一、go mod 是什么?二、详细命令1. init2.download3.tidy4.graph5.edit5.vendor5.verify5.why补充:golang开启mod后import报红解决总结一、go mod 是什么?go modules 官方...
目录upload.htmlgin_stream_upload_file.go一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存。如果是个巨大的文件,则可能内存会爆掉;且,有的时候我们...
目录前言面向对象的方式操作 JSON实现原理对 JSON 做四则运算总结前言在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一...
目录缘起开闭原则场景思路ICourse.goGolangCourse.goIDiscount.goDiscountedGolangCourse.goopen_close_test.go测试缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学...
一、什么是嵌入类型先看如下代码:type user struct { name string email string}type admin struct { user // Embedded Type level string}可以看到admin结构中...
目录1.获取远程包2.应用1.获取远程包go 语言有一个获取远程包的工具就是 go get,目前 go get 支持多数开源社区 (例如:github、googlecode、bitbucket、Launchpad)例如:go get...
背景:golang的interface是一种satisfied式的。A类只要实现了IA interface定义的方法,A就satisfied了接口IA。更抽象一层,如果某些设计上需要一些更抽象的共性,比如print各类型,这...
通过flag包我们可以很方便的实现命令行程序的参数标志,接下来我们来看看如何实现命令行程序的使用帮助,通常以参数标志-h或--help的形式来使用。自动生成使用帮助我们只需要声...
目录引言选择器的深度有效选择器唯一性+最浅深度空指针接口一个特殊情况在 hood 下引言在 Go 语言中,表达式 foo.bar 可能表示两件事。如果 foo 是一个包名,那么表达式就是一...
目录前言1. 结构体与JSON互转2. map与JSON互转3. 结构体的变量不加tag标签能否正常转成json数据4. JSON操作的一些小技巧(1)忽略掉 struct 指定字段(2)添加额外的字段(3)合并两个...
目录1.goroutine停止介绍2.goroutine停止的5种方法2.1使用for-range2.2使用for-select(向退出通道发出退出信号)2.3使用for-select(关闭退出通道)2.4使用for-select(关闭多...
目录引言RTP 数据包头部字段Golang 的相关实现结尾引言在 Coding 之前我们先来简单介绍一下 RTP(Real-time Transport Protocol), 正如它的名字所说,用于互联网的实时传输协...
目录引言语法说明新提案讨论总结引言Go 的错误处理一直是表现最突出的一块地方,许许多多的同学都提出了各种提案,例如:引入 try-catch、用 panic 代替 if err != nil、引入新的...
目录1.Arrays (数组)2.切片2.1 make创建切片3.映射MapArrays (数组), Slices (切片) 和 Maps (映射) 是常见的一类数据结构1.Arrays (数组)数组是定长的。长度不可改变。初始化package...
目录前言zap包的集成简介最基础的使用定制化进阶封装前言在我们的日常开发中, 日志模块永远是最基础且最重要的一个模块, 它可以有效的帮我们发现问题, 定位问题, 最后去解...
用golang来实现的webserver通常是是这样的//main.gopackage mainimport ( "fmt" "io" "net/http")func defaultHandler(w http.ResponseWriter, r *http.Request) { io.Writ...
目录defer的触发时机defer,return,返回值的执行顺序闭包与匿名函数defer用于资源的释放,会在函数返回之前进行调用。如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达...
目录引言内存模型定义是什么happens-before 是什么A 不一定 happens-before BGo 语言中的 happens-before定义Go Channel 实例例子 1例子 2例子 3例子 4总结引言在日常工作...
目录前言实现原理词法分析提前检查生成 JSONObject 树总结前言之前在写 gscript时我就在想有没有利用编译原理实现一个更实际工具?毕竟真写一个语言的难度不低,并且也很难真的...
目录Go 编写定时器和定时任务TimerTickergocron安装Demo总结Go 编写定时器和定时任务在 项目开发当中,可能会遇到这样的场景:1 A任务需要在多久之后执行一次(定时器)2.B任务需...
目录1、前言2、实现覆盖某一行文件内容的思路3、实现覆盖某一行内容的代码示例4、扩展1、前言有这样一个需求,我们查找到文件中带有某个关键词的一行内容后,对该行内容进行替...
目录前言转义字符性能优化实现四则运算总结前言在上一篇中介绍了xjson的功能特性以及使用查询语法快速方便的获取JSON中的值。同时这次也更新了一个版本,主要是两个升级:对转...
1.条件语句几个注意点和C#不一样的。if a < 5 { return 0} else { return 1}① 条件语句不需要使用括号将条件包含起来 a<5 ,C#必须有()②无论语句体内有几条语句,...
Go语言没有继承、构造函数和析构函数等概念,但是它是面向对象的。.net中类型系统分为值类型和引用类型,两种转换需要进行装箱和拆箱,都是继承自Object类型Go语言大多数类型都是...
1.函数的声明定义//func关键字//getStudent函数名//(id int, classId int) 参数列表//(name string,age int) 返回值列表func getStudent(id int, classId int)(name string...
目录Go语言介绍1. Go语言的由来2. Go语言的特点Go 安装Linux平台安装GoWindows平台安装GoIDE安装Linux平台Vim 配置Vim IDE 常用功能Windows平台GoLand安装测试工具安装Linu...
目录基本语法PanicRecover示例一:recover()使用方法实例二:panic()使用方法基本语法异常处理是程序健壮性的关键,往往开发人员的开发经验的多少从异常部分处理上就能得到体现。...
目录引言SliceHeader疑问坑StringHeader0 拷贝转换总结引言在 Go 语言中总是有一些看上去奇奇怪怪的东西,咋一眼一看感觉很熟悉,但又不理解其在 Go 代码中的实际意义,面试官却...
目录压缩zip解压zip压缩zipfunc Zip(dest string, paths ...string) error { zfile, err := os.Create(dest) if err != nil { return err } defer zfil...