在介绍读取方法之前,首先介绍两种类型:unsafe.Pointer 和uintptr。 unsafe.Pointer代表的是任意类型的指针,它支持四种特有的操作: 任意类型的指针变量都可以转换为unsafe.Pointe…
分类:golang
听说string内容不能修改?我偏要改给你看!
很多文章都说,Go语言中的string类型被设计为不可修改(immutable)的。的确,从Go语法的角度来说,确实是无法修改的。比如如下代码: 那么有没有什么办法突破这个限制呢?答案是有的。 很多文章都讲过通过unsa…
方法的receiver为nil的时候是否会造成panic?
以下代码是否会造成程序panic? 毫无疑问,会! 因为table只是声明了变量,但是没有赋值,此时值为零值nil,在调用对应方法时会造成nil dereference panic。 那下面的代码会panic吗? 答案是…
记一次由垃圾回收造成的诡异问题
背景 在Go程序运行的过程中,很有可能造成程序panic,并且这个panic的信息是不会被记录在日志文件中的。这种情况该怎么办?一种方法就是使用recover,通过recover来捕获panic信息,然后再写入日志文件。…
go2go安装及使用
go的泛型草案已经出来一段时间了,喜欢尝鲜的朋友想必早都已经体验过了。但是基本也都是在playground上小小的尝试了一下。在playground上只能把所有代码写在一个文件里,那有没有方法体验一下在真正的项目中应用泛…
使用go module时遇到的坑
获取依赖包失败 执行go build命令后,结果如下: 因为安装go后,默认的GOPROXY环境变量为https://goproxy.golang.org,而这个代理在国内是无法访问的,因此会报错。 最新的1…
Go条件变量sync.Cond详解
最近遇到一个这样的场景:当某个条件或者任务完成了之后,通知其他等待的各个“守护goroutine”(即死循环执行某项任务的goroutine)继续执行。首先想到的是使用channel来完成,然而channel有一定的局限…
golang中json反序列化为struct时key的大小写判别原则
说明:此文章是在go1.11的基础上完成,其他版本的不保证相同 以前一直以为golang在反序列化的时候是tag名和key名严格对应的,结果偶然间发现并不是这样。具体的流程其实是这样: 1. 获取结构体的字段名,暂称为…