版本: go version go1.13 darwin/amd64
在go源码runtime目录中找到gcTrigger结构体,就能看出大致调用的位置GC调用方式所在位置代码定时调用runtime/proc.go:forcegchelpe
本文是Go比较有名的一个坑,在以前面试的时候也被问过,为什么想起来写这个?
因为我们线上就真实出现过这个坑,写给不了解的人在使用 if err != nil 的时候提高警惕。
Go语言的interface{}在使用过程中有一个特别坑的特性,
panic源码解读
前言
本文是在go version go1.13.15 darwin/amd64上进行的
panic的作用panic能够改变程序的控制流,调用panic后会立刻停止执行当前函数的剩余代码,并在当前Goroutine中递归
这是因为获取golang.org/x/...时需要翻墙,而我这里没有翻墙,不过没关系
设置下代理即可:// bash mac
export GOPROXY=https://goproxy.io
// powershell windows
最近由于项目需求,阅读一些Go语言编写的项目的源代码,在某一个函数中发现了一个奇怪的现象:一个函数的返回值类型声明的是一个接口的类型,但是实际在函数体内返回的却是一个结构体类型的对象。
这个现象对于新手的我来说很是费解。在经过一些资料的查阅
1 bytes.Buffer定义
bytes.Buffer提供可扩容的字节缓冲区,实质是对切片的封装;结构中包含一个64字节的小切片,避免小内存分配:// A Buffer is a variable-sized buffer of byt
在看本篇文章前我们需要了解阻塞的概念
在执行过程中暂停,以等待某个条件的触发 ,我们就称之为阻塞
在Go中我们make一个channel有两种方式,分别是有缓冲的和没缓冲的
缓冲channel 即 buffer channel 创建方式为