go
解决 Goland 无法 debug 高版本 Go 问题
因为 Go 版本过高,或者 Go 开发环境配置不正确等各种原因,大部分情况出现在同时使用多个 Go 版本得情况。
彻底搞懂 Go 的执行环境
要想彻底搞懂 Go 的执行环境,我们首先得理解 Go 相关得环境变量
Golang 大杀器之性能剖析 PProf
pprof 是用于可视化和分析性能分析数据的工具
Go slice的底层实现原理?
切片是基于数组实现的,它的底层是数组,可以理解为对底层数组的抽象,其占用 24 个字节,包含数据指针(8字节)、切片的长度(8字节)、切片的容量(8字节)三个字段
Go内置函数make和new的区别?
初始化变量一般分为两步:变量声明 + 变量内存分配,在 Go 语言中 var 关键字用来声明变量的,若声明变量是值类型系统会默认为他分配内存空间,并赋该类型的零值。
Go defer关键字的实现原理?
defer 能够让我们推迟执行某些函数调用,推迟到当前函数返回前才实际执行。defer 与 panic 和 recover 结合,形成了Go语言风格的异常与捕获机制。defer 语句经常被用于处理成对的操作,如文件句柄关闭、连接关闭、释放锁。虽然 defer 方便开发者使用,但是也有一定的性能损耗。
Go函数返回局部变量的指针是否安全?
一般来说,局部变量会在函数返回后被销毁,因此被返回的引用就成为了 “无所指” 的引用,程序会进入未知状态。但这在 Go 中是安全的,Go 编译器将会对每个局部变量进行逃逸分析。如果发现局部变量的作用域超出该函数,则不会将内存分配在栈上,而是分配在堆上,因为他们不在栈区,即使释放函数,其内容也不会受影响。
Go方法值接收者和指针接收者的区别?
如果方法的接收者是指针类型,无论调用者是对象还是对象指针,修改的都是对象本身,会影响调用者;如果方法的接收者是值类型,无论调用者是对象还是对象指针,修改的都是对象的副本,不影响调用者;
Go 常用标准库之fmt
fmt 包实现了类似C语言 printf 和 scanf 的格式化I/O。格式化动作(‘verb’)源自C语言但更简单。
Go 常用标准库之time
time 包提供了时间的显示和测量用的函数。日历的计算采用的是公历。
Go 常用标准库之os
os 包提供了操作系统函数的不依赖平台的接口。设计为 Unix 风格的,虽然错误处理是 go 风格的;失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。例如,如果某个使用一个文件名的调用(如Open、Stat)失败了,打印错误时会包含该文件名,错误类型将为*PathError,其内部可以解包获得更多信息。
Go 常用标准库之sync
sync 包提供了基本的同步基元,如互斥锁。除了 Once 和 WaitGroup 类型,大部分都是适用于低水平程序线程,高水平的同步使用 channel 通信更好一些。
Go 常用标准库之errors
Go 常用标准库之errors
Go 常用标准库之net
net 包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。
Go 垃圾收集器
在几乎所有的现代编程语言中,垃圾收集器都是一个复杂的系统,为了在不影响用户程序的情况下回收废弃的内存需要付出非常多的努力,本节会详细介绍 Go 语言运行时系统中垃圾收集器的设计与实现原理...