摘要: golang slice传参陷阱 起因 package main func SliceRise(s []int) { s = append(s, 0) for i := range s { s[i]++ } } func main() { s1 := []int{1, 2} s2 := s1 s2 阅读全文
posted @ 2021-11-24 18:03 Dawnlight-_- 阅读(320) 评论(0) 推荐(0) 编辑
摘要: defer原理 defer1.12 defer延迟和倒序的机制 延迟 在go语言中,我们可以很方便的用defer关闭一个打开的文件、释放一个Redis连接,或者解锁一个Mutex。而且Go语言在设计上保证,即使发生panic,所有的defer调用也能够被执行。不过多个defer函数是按照定义顺序倒序 阅读全文
posted @ 2021-11-24 17:49 Dawnlight-_- 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 为npm安装淘宝镜像加速时使用以下命令: npm install -g cnpm --registry=https://registry.npm.taobao.org 但是当安装完成以后出现以下错误: 原因是系统找不到cnpm.cmd这个命令在哪里,我在网上看了很多篇博客的解决办法都不行。后面发现我 阅读全文
posted @ 2021-11-21 19:03 Dawnlight-_- 阅读(796) 评论(0) 推荐(0) 编辑
摘要: golang 闭包 实例引入 先来看一段代码,下面的addr函数的返回值是另一个函数,被返回的这个函数中,又对addr函数中的变量进行了累加,然后返回。 在main函数中,使用变量pos接收addr()函数返回的函数对象,然后在for循环中调用5次。 package main import "fmt 阅读全文
posted @ 2021-11-16 20:40 Dawnlight-_- 阅读(623) 评论(0) 推荐(0) 编辑
摘要: golang函数调用栈 如果在一个函数中调用另一个函数,编译器就会对应生成一条call指令,程序执行到这条指令时,就会跳转到被调用函数入口处开始执行,而每个函数的最后都有一条ret指令,负责在函数结束后跳回到调用处,继续执行。 函数栈帧 函数执行时需要有足够的内存空间,供它存放局部变量、参数等数据, 阅读全文
posted @ 2021-11-15 22:42 Dawnlight-_- 阅读(280) 评论(0) 推荐(0) 编辑
摘要: golang内存对齐 什么是内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址,并占用合适的长度,这就是内存对齐。 每种类型的对齐值就是它的对齐边界,内存对齐要求数据存储地址以及占用的字节数都要是它的对齐边界的倍数。所以下述的int32要错开两个字节,从4开始存,却不能紧接 阅读全文
posted @ 2021-11-15 20:38 Dawnlight-_- 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 一、概念 类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。 再来看一下派生类中从基类中继承而来的成员和新增成员的关系 阅读全文
posted @ 2021-11-11 16:40 Dawnlight-_- 阅读(254) 评论(0) 推荐(0) 编辑
摘要: slice内存模型 我的go源码版本是:go1.17.2 slice的源码在Go_SDK\go1.17.2\src\runtime\slice.go中。 和map.go在同一个目录下。 首先我们来看一下slice的结构: type slice struct { array unsafe.Pointe 阅读全文
posted @ 2021-11-11 16:29 Dawnlight-_- 阅读(126) 评论(0) 推荐(0) 编辑
摘要: "..." 其实是golang的一种语法糖。 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。 用法一:函数的不定参数 package main import "fmt" func test1(args ...string) 阅读全文
posted @ 2021-11-11 14:38 Dawnlight-_- 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 总体来说golang的map是hashmap,是使用数组+链表的形式实现的,使用拉链法消除hash冲突。 map的内存模型 我的go源码版本是:go1.17.2 map的源码在Go_SDK\go1.17.2\src\runtime\map.go中。 首先我们来看一下map最重要的两个结构: hmap 阅读全文
posted @ 2021-11-10 23:04 Dawnlight-_- 阅读(833) 评论(0) 推荐(0) 编辑