随笔分类 -  golang学习随笔

摘要:协程数据传递问题 func TestGoroutineData(t *testing.T) { var wg sync.WaitGroup wg.Add(1) i := 0 go func(j int) { t.Log("异步协程执行") assert.Equal(t,0,j) assert.Equ 阅读全文
posted @ 2020-09-02 16:59 郭星 阅读(212) 评论(0) 推荐(0)
摘要:for range 作为 golang中的语法糖提供了便利操作; 对于for range 支持 的数据类型包含: 数组以及指向数组的指针 切片 字典 通道 字符串 在range的语法糖中提供了一下特殊操作 https://blog.cyeam.com/golang/2018/10/30/for-in 阅读全文
posted @ 2020-08-26 10:30 郭星 阅读(1040) 评论(0) 推荐(0)
摘要:对于指针类型不安全编程,通过指针值以及偏移量操作slice私有属性 // 通过指针值获取切片 func TestGetPrivate(t *testing.T) { s := []int{1, 2, 3} sptr := uintptr(unsafe.Pointer(&s)) // 获取当前结构体实 阅读全文
posted @ 2020-08-25 14:50 郭星 阅读(226) 评论(0) 推荐(0)
摘要:接口类型变量的内存结构 动态类型 动态值 对于动态类型指的是当其他非接口类型变量赋值给接口类型变量时,接口类型变量中的动态类型就是当前非接口类型 对于动态值指的就是当其他非接口类型变量赋值给接口类型变量时,接口类型变量中的动态值就是当前非接口类型变量值的副本 对于接口变量对应的就是runtime2. 阅读全文
posted @ 2020-08-25 10:43 郭星 阅读(302) 评论(0) 推荐(0)
摘要:关于获取slice相关内存地址操作 s := make([]int, 1) t.Log(unsafe.Pointer(&s))// 获取当前slice 结构体实例的内存地址 t.Log(unsafe.Pointer(&(s[0]))) // 获取底层数组第一个元素的内存地址 t.Logf("%p\n 阅读全文
posted @ 2020-08-20 15:28 郭星 阅读(176) 评论(0) 推荐(0)
摘要:defer 作为延迟函数存在,在函数执行结束时才会正式执行,一般用于资源释放等操作 参考一段代码https://mp.weixin.qq.com/s/yfH0CBnUBmH0oxfC2evKBA来分析defer 函数压栈操作 package def_test import ( "fmt" "test 阅读全文
posted @ 2020-08-04 14:22 郭星 阅读(385) 评论(0) 推荐(0)
摘要:当对map只声明时,由于map为引用类型,所以默认值为nil,但对nil map 而言,支持read ,但不支持write 当执行write操作时, 会抛出panic异常; 代码如下: func TestDeclareInit(t *testing.T) { // 只声明 var m1 map[in 阅读全文
posted @ 2020-08-01 10:48 郭星 阅读(190) 评论(0) 推荐(0)
摘要:对于获取slice的指针地址, 通过unsafe.Pointer 和 "%p"占位符两种方式得到的地址是不同的 s := make([]int, 1) t.Log(unsafe.Pointer(&s),unsafe.Pointer(&(s[0])),len(s),cap(s)) t.Logf("%p 阅读全文
posted @ 2020-07-30 17:19 郭星 阅读(942) 评论(1) 推荐(0)