- 博客(54)
- 收藏
- 关注
原创 golang实现LRU缓存
写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。LRUCache cache = new LRUCache( 2 /* 缓存容量 */ );// 返回 -1 (未找到)cache.get(1);// 返回 -1 (未找到)cache.get(1);
2024-03-20 13:47:10 475
原创 Golang的new和make有何区别?
make 只能用来分配及初始化类型为 slice、map、chan 的数据;new 可以分配任意类型的数据。 new 分配返回的是指针,即类型 *Type;make 返回引用,即 Type。
2024-03-19 11:37:25 322
原创 golang互斥锁问题
运行结果:fatal error: all goroutines are asleep - deadlock!下面代码的运行结果是什么?
2024-03-15 11:15:45 330
原创 对已经关闭的的chan进⾏读写,会怎么样?为什么?
如果 chan 关闭前,buffer 内有元素已经被读完,chan 内⽆值,接下来所有接收的值都会⾮阻塞直接成功,返回 channel 元素的零值,但是第⼆个 bool 值⼀直为 false。如果 chan 关闭前,buffer 内有元素还未读 , 会正确读到 chan 内的值,且返回的第⼆个 bool 值(是否读成功)为 true。读已经关闭的 chan 能⼀直读到东西,但是读到的内容根据通道内关闭前是否有元素而不同。写已经关闭的 chan 会 panic。
2023-12-27 12:34:19 575
原创 为 sync.WaitGroup 中 Wait 函数⽀持 WaitTimeout 功能
【代码】为 sync.WaitGroup 中 Wait 函数⽀持 WaitTimeout 功能。
2023-12-22 16:19:18 123
原创 实现了 People 接⼝,接⼝不为 nil
Student 的定义后本身没有初始化值,所以 *Student 是 nil 的,但是 *Student 实现了 People 接⼝,接⼝不为 nil。
2023-12-22 15:23:14 47
原创 Student 和 *Student 是两种类型
在 golang 语⾔中, Student 和 *Student 是两种类型,第⼀个是表示 Student 本身,第⼆个是指向 Student的指针。编译失败,值类型 Student{} 未实现接⼝ People 的⽅法,不能定义为 People 类型。
2023-12-22 15:13:16 98
原创 追加数据时会从 len(s) 位置开始填充数据
make 在初始化切⽚时指定了⻓度,所以追加数据时会从 len(s) 位置开始填充数据。输出为 0 0 0 0 0 1 2 3。
2023-12-22 14:56:25 36
原创 没有继承概念只有组合
因此,*Teacher的ShowB不会覆写被组合的People的⽅法。golang语⾔中没有继承概念,只有组合,也没有虚⽅法,更没有重载。输出结果为showA、showB。
2023-12-22 14:34:40 54
原创 最先输出的是最后创建的G
这个输出结果决定来⾃于调度器优先调度哪个G。从runtime的源码可以看到,当创建⼀个G时,会优先放⼊到下⼀个调度的runnext字段上作为下⼀次优先调度的G。因此,最先输出的是最后创建的G,也就是9.
2023-12-22 14:13:08 38
原创 map的value本身是不可寻址的
故如果需要修改map值,可以将map中的⾮指针类型value,修改为指针类型,⽐如使⽤map[string]*Student。map的value本身是不可寻址的,因为map中的值会在内存中移动,并且旧的指针地址在map改变时会变得⽆效。
2023-12-22 13:22:50 46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人