A collection of 16 posts

golang基础

Data race 数据竞争:当多个goroutine并发访问同一个变量,并且至少有一个goroutine对变量进行写操作时,就会发生数据竞争。 go提供了一个内置的数据竞争检测工具: $ go test -race mypkg // to test the package $ go run -race mysrc.go ...

Golang逃逸分析

简介 编译代码时,编译器根据分析,判断将变量分配在栈或堆上。 一般情况 函数定义中,一般将局部变量和参数分配到栈上(stack frame)上。但是,如果编译器不能确定在函数返回(return)时,变量是否被引用(reference),分配到堆上;如果局部变量非常大,也应分配在堆上。 如果对变量取地址( ...

雨痕 Go语言学习笔记-并发

Goroutine 通过go关键字创建并发执行单元,有调度器安排到适合的系统线程执行 调度器不能保证多个 goroutine 执⾏次序,且进程退出时不会等待它们结束 默认情况下,进程启动后仅允许⼀个系统线程服务于 goroutine。可使⽤环境变量或标准库函数runtime.GOMAXPROCS修改,让调度器⽤多个线程实现多核并⾏,⽽不仅仅是并发(注意并行和并发的区别) 调⽤ ...

雨痕 Go语言学习笔记-接口

接口 接⼝命名习惯以 er 结尾,结构体 接⼝没有数据字段 可在接⼝中嵌⼊其他接⼝ 执行机制 接⼝对象由接⼝表 (interface table) 指针和数据指针组成 接⼝表存储元数据信息, ...

雨痕 Go语言学习笔记-方法

方法定义 ⽅法总是绑定对象实例,并隐式将实例作为第⼀实参 (receiver) 函数和方法有区别,方法和实例绑定,会改变实例状态,方法不会 不⽀持⽅法重载,receiver 只是参数签名的组成部分。(重载,参数和返回值不同的同名函数,实际是函数签名不同) 可⽤实例 value ...

雨痕 Go语言学习笔记-数据

Array 和以往认知的数组有很⼤不同。 • 数组是值类型,赋值和传参会复制整个数组,⽽不是指针。 • 数组⻓度必须是常量,且是类型的组成部分。 [2]int 和 [3]int 是不同类型。 • ⽀持 "=="、 "!=" ...

雨痕 Go语言学习笔记-函数

函数定义 不⽀持 嵌套 (nested)、重载 (overload) 和 默认参数 (default parameter)。 • ⽆需声明原型。 • ⽀持不定⻓变参。 • ⽀持多返回值。 • ⽀持命名返回参数。 • ⽀持匿名函数和闭包。 函数是第⼀类对象,可作为参数传递。 ...