golang
38
[toc]垃圾回收的知识很早之前就了解了,现在回过头在看,发现有了新的问题,新的理解存在的问题为什么必须三色,二色的话会有什么问题
插入写屏障为什么不行
为什么必须使用混合写屏障,删除写屏障为什么不行。为什么必须三色
三色具体是指:黑色。已经扫描结束的对象
灰色。待扫描的对象
白色。未扫描的对象具体实现中,我们遍历灰色对象,标记为黑色。并把指向的新对象标记为灰色。
但是如果是二色的话,那么就只有黑色和白色。
那么遍历的操作是不能暂停的。因为如果恢复的话,面对黑色对象我们不知道这个是已经扫描过的还是未扫描的
58
胖sir :接着,给你一个馅饼儿兵长 : 来嘞!!一篇来自ORM的整理笔记...1 什么是ORM?为什么要⽤ORM?什么是ORM ,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,这样,我们在具体的 操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象⼀样操作它就可以了 。 ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建⽴在概念模型的基础上的。域模型是⾯向对 象的关系模型是⾯向关系的⼀般情况下,⼀个持久化类和⼀个表对
51
defer关键字将函数调用计划到外层函数返回时执行,典型的用法就是互斥锁释放,文件关闭。这样的函数是不会因为随着返回分支的数量变多而忘记关闭。
但是defer的执行特定如果没有了解的话,很容易掉坑里。
多个defer的执行顺序
首先,对于下述例子,输出为何
for i := 0; i < 5; i++ {defer fmt.Printf("%d ", i)
}首先说明,函数存在多个defer语句,
285
有群友说面试的时候被问到:单核CPU,开两个goroutine,其中一个死循环,会怎么样?相信很多小伙伴乍一看一脸懵,我就在群里回了一下go1.14版本实现了基于信号的抢占式调度,可以在goroutine执行时间过长的时候强制让出调度,执行其他的goroutine。接下来看看具体怎么实现的,话不多说直接上代码。基于go1.15 linux amd64。
先看一个常规的栗子
func f1() {fmt.Println("This is f1")
}func f2() {fmt.Println("This
38
func main(){ctx, cancelFunc := context.WithTimeout(context.Background(), 10*time.Second)defer cancelFunc()result := make(chan int, 1)errChan := make(chan error, 1)fmt.Println("start: ", time.Now().Uni
66
GOSUMDB(go checksum database)是Go官方为了go modules安全考虑,设定的module校验数据库,服务器地址为:sum.golang.org
你在本地对依赖进行变动(更新/添加)操作时,Go 会自动去这个服务器进行数据校验,保证你下的这个代码库和世界上其他人下的代码库是一样的。
和go.mod一样,Go 会帮我们维护一个名为go.sum的文件,它包含了对依赖包进行计算得到的校验值
环境变量GOSUMDB可以用来配置你使用哪个校验服务器和公钥来做依赖包的校验
Go1.13
879
deepin下安装protobuf
首先安装依赖sudo apt-get install autoconf automake libtool curl make g++ unzip libffi-dev -y然后进入GOPATH下合适的目录,如果没有目录就自己创建,获取protobuf源码cd $GOPATH/src/github.com/golang/git clone https://github.com/protocolbuffers/protobuf.git再进入protobuf源码文件夹cd p
45
在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。Go 语言按类别有以下几种数据类型:序号类型和描述1布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。2数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。3字符串类型: 字符串就是一串固定长度的