go的channel用法非常简单,几句话说一下,会的不用看,往下走。 1.开启channel: //没有缓存的channel,直接中转 c:= make(chan 类型) //有n个【类型】位置作为缓存的channel,先拷贝进缓存,再中转 c:= make(chan 类型, n) //对不带缓冲的 channel 进行的操作实际上可以看作“同步模式” //带缓冲的则称为“异步模式”
本文主要描述Golang底层的一些原理与机制,包括4个主题 1)Golang的memory manager and allocation 2)Golang的goroutine scheduler原理 3)Golang的channel实现goroutine concurrent原理 4)Golang的garbage collection原理 这篇博客只是一个绪论
database/sql 概念 database/sql 它的大致原理如下: Driverdatabase/sql/driverDriverDriverdatabase/sqlsql.Register()database/sqldatabase/sqldatabase/sqlsql
一说到 Golang 的协程调度模型,大家一定会脱口而出 GMP 调度模型。G 代表 goroutine 协程,M 代表运行 goroutine 的线程,P 代表 Process 装载 goroutine 的本地队列,三者搭配构成 Golang 的协程调度模型。但大家有没有想过,协程模型是怎样发展到 GMP 模型?GMP 主要为了解决哪些问题?下面就通过源码来深入浅出 Golang 协程调度模型
kubernetes源码调试环境搭建 1 搭建调试环境 在阅读kubernetes源码的时候,首先需要能进行源码的debug,这样才能跟着代码一步步梳理其逻辑。下面就先介绍一下kubernetes的源码调试的环境搭建。 1.1 安装依赖 golang kubernetes是使用golang实现的,所以我们需要安装golang的环境,对应的版本关系如下:
数组 说切片前先说下数组。数组的两个特性 一段连续内存地址,每个元素都是连续的 元素的类型相同,并且元素个数固定 Go 数组是值类型,赋值和函数传参操作都会复制整个数组数据。 arr := [2]int{1,2}arr2 := arr fmt.Printf("%p %p",&arr ,&arr2)//切片slice1 := []int{1,2}slice2 := slice1 fmt
11.2 使用GDB调试 开发程序过程中调试代码是开发者经常要做的一件事情,Go语言不像PHP、Python等动态语言,只要修改不需要编译就可以直接输出,而且可以动态的在运行环境下打印数据。当然Go语言也可以通过Println之类的打印数据来调试,但是每次都需要重新编译,这是一件相当麻烦的事情。我们知道在Python中有pdb/ipdb之类的工具调试,Javascript也有类似工具
【Go学习】Golang源码编译和gdb调试环境搭建 GO可以说是近几年最热门的新兴语言之一了, 一般人看到分布式和大数据就会想到GO。本文主要是来编译一下go的源码,然后搭建gdb的调试环境。 源代码是Google官方的实现的1.10.2版本, 不适用于其他版本和gccgo等其他实现, 运行环境是CentOS Linux release 7.5.1804. 编译golang源代码
这一篇文章是分享http2的文章,前两篇主要是http1的源码实现,前两篇有兴趣的可以再阅读一下。详情可点击:Golang源码深入-Go1.15.6发起http请求流程-1 和 Golang源码深入-Go1.15.6发起http请求流程-2。目前http2协议在很多的web网站中有应用,http2通过多路复用,二进制流,Header压缩等等技术,极大地提高了性能。http2的源码核心流程图解如下
go的底层是汇编语言,利用汇编来实现不同平台,不同cpu的实现。 简单做个测试。 拷贝汇编的indexbyte到项目,顺呗拷贝一份go的申明,假如这个文件是cgo  在项目中使用cgo中的indexbyte ![image