有趣的闭包
golang 中的函数作为一等公民,所以函数作为函数的返回值非常常见。 第一题 func Test1(t *testing.T) {adder := func() func(int) int {sum := 0return func(x int) int {sum += xreturn sum}}add, sub := adder(), adder()for i := 0; i < 4; i++
golang 中的函数作为一等公民,所以函数作为函数的返回值非常常见。 第一题 func Test1(t *testing.T) {adder := func() func(int) int {sum := 0return func(x int) int {sum += xreturn sum}}add, sub := adder(), adder()for i := 0; i < 4; i++
[toc]垃圾回收的知识很早之前就了解了,现在回过头在看,发现有了新的问题,新的理解存在的问题为什么必须三色,二色的话会有什么问题 插入写屏障为什么不行 为什么必须使用混合写屏障,删除写屏障为什么不行。为什么必须三色 三色具体是指:黑色。已经扫描结束的对象 灰色。待扫描的对象 白色。未扫描的对象具体实现中,我们遍历灰色对象,标记为黑色。并把指向的新对象标记为灰色。 但是如果是二色的话,那么就只有黑色和白色。 那么遍历的操作是不能暂停的。因为如果恢复的话,面对黑色对象我们不知道这个是已经扫描过的还是未扫描的
胖sir :接着,给你一个馅饼儿兵长 : 来嘞!!一篇来自ORM的整理笔记...1 什么是ORM?为什么要⽤ORM?什么是ORM ,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,这样,我们在具体的 操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象⼀样操作它就可以了 。 ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建⽴在概念模型的基础上的。域模型是⾯向对 象的关系模型是⾯向关系的⼀般情况下,⼀个持久化类和⼀个表对
defer关键字将函数调用计划到外层函数返回时执行,典型的用法就是互斥锁释放,文件关闭。这样的函数是不会因为随着返回分支的数量变多而忘记关闭。 但是defer的执行特定如果没有了解的话,很容易掉坑里。 多个defer的执行顺序 首先,对于下述例子,输出为何 for i := 0; i < 5; i++ {defer fmt.Printf("%d ", i) }首先说明,函数存在多个defer语句,
有群友说面试的时候被问到:单核CPU,开两个goroutine,其中一个死循环,会怎么样?相信很多小伙伴乍一看一脸懵,我就在群里回了一下go1.14版本实现了基于信号的抢占式调度,可以在goroutine执行时间过长的时候强制让出调度,执行其他的goroutine。接下来看看具体怎么实现的,话不多说直接上代码。基于go1.15 linux amd64。 先看一个常规的栗子 func f1() {fmt.Println("This is f1") }func f2() {fmt.Println("This
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
GOSUMDB(go checksum database)是Go官方为了go modules安全考虑,设定的module校验数据库,服务器地址为:sum.golang.org 你在本地对依赖进行变动(更新/添加)操作时,Go 会自动去这个服务器进行数据校验,保证你下的这个代码库和世界上其他人下的代码库是一样的。 和go.mod一样,Go 会帮我们维护一个名为go.sum的文件,它包含了对依赖包进行计算得到的校验值 环境变量GOSUMDB可以用来配置你使用哪个校验服务器和公钥来做依赖包的校验 Go1.13
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