内存泄露1.内存泄漏01.内存泄漏概念1.1 内存泄漏定义 定义:由于疏忽或错误造成程序未能释放已经不再使用的内存。 1.2 go内存泄漏两种情况 情况1:僵尸进程 - 有goroutine泄漏,goroutine“飞”了,zombie goroutine没有结束 - 这个时候在这个goroutine上分配的内存对象将一直被这个僵尸goroutine引用着 - 进而导致gc无法回收这类对象 2021-02-10 Go进阶 #Go进阶
内存逃逸1.内存逃逸01.内存逃逸1.1 其他语言内存回收机制 在C/C++开发中,动态分配内存(new/malloc)需要我们手动释放资源。 这样做的好处是,需要申请多少内存空间可以很好的掌握怎么分配。 但是这有个缺点,如果忘记释放内存,则会导致内存泄漏。 在很多高级语言中(python/Go/java)都加上了垃圾回收机制。 1.2 什么是内存逃逸 函数内部申 2021-02-09 Go进阶 #Go进阶
make和new1.make和new01.make和new1.1 make和new比较 new 和 make 是两个内置函数,主要用来创建并分配类型的内存。 make和new区别 make 关键字的作用是创建于 slice、map 和 channel 等内置的数据结构 new 的作用是为类型申请一片内存空间,并返回指向这片内存的指针 package main import "fmt" func main() 2021-02-08 Go进阶 #Go进阶
pointer01.pointer01.pointer1.1 什么是pointer 在Go里面pointer就是1种可以把内存地址存储起来的数据类型。 我们使用pointer数据类型的变量可以记录下另1个变量的内存地址,方便我们修改这变量的值。 只需要记住以下几点: &变量名: 获取变量的内存地址 *pointor:通过指针类型的变量,获取该指针指向的值 package main import " 2021-02-07 Go进阶 #Go进阶
interface1.interface01.interface1.1 interface作用 接口是 Go 语言的重要组成部分,它在 Go 语言中通过一组方法指定了一个对象的行为 接口 interface 的引入能够让我们在 Go 语言更好地组织并写出易于测试的代码 golang中的接口分为 带方法的接口和空接口 iface:表示带方法的接口 eface:表示空接口 1.2 eface空接口 空接口 2021-02-05 Go进阶 #Go进阶
Channel1.channel01.channel的整体结构图1.1 channel结构图 channel本质是一个hchan这个结构体 type hchan struct { buf unsafe.Pointer // points to an array of dataqsiz elements sendx uint // send index re 2021-01-30 Go进阶 #Go进阶
数组与切片1.数组与切片01.数组1.1 数组 数组是一种非常有用的数据结构,因为其占用的内存是连续分配的。 由于内存连续,CPU能把正在使用的数据缓存更久的时间。 而且内存连续很容易计算索引,可以快速迭代数组里的所有元素。 golang中声明数组需要告诉数组长度,以及存放数据类型 一旦初始化成功,那么存储的数据类型和数组长度就都不能改变了 xxxxxxxxxx package mainimport “fm 2021-01-25 Go进阶 #Go进阶
Map01.Map01.map底层 [参考(opens new window)](https://www.bookstack.cn/read/qcrao-Go-Questions/map-map 的扩容过程是怎样的.md) 1.1 map底层浅析 笼统的来说,go的map底层是一个hash表,通过键值对进行映射 键通过哈希函数生成哈希值,然后go底层的map数据结构就存储相应的hash值,进行索引,最 2021-01-23 Go进阶 #Go进阶
字符串1.字符串01.字符串底层1.1 字符串底层结构 一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据。 和数组不同的是,字符串的元素不可修改,是一个只读的字节数组。 每个字符串的长度虽然也是固定的,但是字符串的长度并不是字符串类型的一部分。 Go语言字符串的底层结构在 reflect.StringHeader 中定义 type StringHeader struct 2021-01-20 Go进阶 #Go进阶
go mod包管理工具1.go mod包管理工具01.Golang 中包的介绍和定义 包(package)是多个 Go 源码的集合,是一种高级的代码复用方案 Go 语言为我们提供了很多内置包,如 fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等。 Golang 中的包可以分为三种:1、系统内置包 2、自定义包 3、第三方包 1、系统内置包 f 2021-01-13 Go基础 #Go基础