
Go语言学习
文章平均质量分 55
记录学习Go语言的基础知识,或者实际应用。嘎嘎!
Lzww0608
知天之所为,知人之所为者,至矣!
展开
-
Golang反射:运行时类型检查与操作
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。语言中的一个高级特性,它允许程序在运行时查询和使用类型信息。原创 2024-08-28 22:08:43 · 606 阅读 · 1 评论 -
Golang中init()函数初始化顺序
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。原创 2024-07-15 21:15:26 · 395 阅读 · 0 评论 -
Golang中swtich中如何强制执行下一个代码块
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。switch 语句中的 case 代码块会默认带上 break,但可以使用 fallthrough 来强制执行下一个 case 代码块。语句,程序不会继续执行下一个。原创 2024-07-03 21:41:10 · 292 阅读 · 0 评论 -
Golang中defer和return顺序
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。所以,如果你在一个函数中写入了。,那么它们的执行顺序是:先执行。语句的赋值部分,然后执行。原创 2024-07-02 21:51:01 · 460 阅读 · 0 评论 -
Golang的Work Stealing机制
Go的运行时系统使用了一种名为(工作窃取)的调度策略来分配Goroutine到可用线程(称为M,即Machine)上执行。这样可以最大化CPU使用率,减少任务调度的开销。在这种机制下,任务队列和调度器通过动态平衡负载来提高并发性能和吞吐量。Go的调度器使用了P(Processor)与M和Goroutine进行交互。每个P都维护了一个本地的Goroutine队列,新创建的Goroutine首先会被放入创建它的P的本地队列中。原创 2024-06-27 22:38:43 · 731 阅读 · 0 评论 -
Golang中使用map时注意的问题
struct。原创 2024-06-26 22:25:29 · 1242 阅读 · 0 评论 -
Golang逃逸分析
在Go语言中,逃逸分析(Escape Analysis)是一种编译器优化技术,用于确定变量是应该分配在堆上还是在栈上。这对程序的性能有显著的影响,因为栈上资源的分配速度和释放速度要比堆上快得多,同时堆上的内存管理也更加简单。原创 2024-06-24 18:06:14 · 387 阅读 · 0 评论 -
Golang中的CAS操作
CAS操作会检查内存位置的当前值与预期的旧值是否相等。CAS是一种无锁的技术,当多个线程尝试使用共享数据时,CAS能够检测到其他线程是否已经改变了这个数据,这是一种解决并发问题的策略。最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。实际操作中,CAS操作的正确性依赖于预期值和实际值的结果对比,因为在设计算法的过程中需要仔细考虑可能的竞争条件。原创 2024-06-23 20:29:41 · 510 阅读 · 0 评论 -
阐述一下Golang中defer的原理
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。关键字,Go实际上会把它后面的函数(通常是一个匿名函数或者清理函数)压入一个栈中。当外部函数准备返回的时候,Go会按照先进先出的(LIFO)的顺序调用并执行这个栈中的所有函数。关键字用于在函数返回前执行一段代码或调用一个清理函数。语句处就计算好,而不是在外部函数返回时才计算。当我们在一个函数内部调用。原创 2024-06-21 18:07:42 · 325 阅读 · 0 评论 -
Goroutine和协程的区别
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。原创 2024-06-20 18:49:09 · 437 阅读 · 0 评论 -
Go中的channel是同步还是异步
Go语言中的channel可以是异步也可以是同步,这取决与它是否是一个缓冲的channel。原创 2024-06-19 22:53:59 · 557 阅读 · 0 评论 -
Golang对nil的Slice和空Slice处理是一致的吗
在Go中,nil的slice和空的slice并不完全相同,尽管它们的许多行为在很多情况下是相似的。原创 2024-05-20 21:49:01 · 474 阅读 · 0 评论 -
Golang安全读写共享变量的方式
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。如果程序中的读操作远多于写操作,那么使用读写锁可能会比互斥锁更有效率。读写锁允许多个协程同时读取变量,但是只允许同一时刻只有一个协程进行写入操作。,然后通过发送和接收消息的方式来读写共享变量。对于一些简单的数值或者布尔类型,我们可以使用原子操作来读写共享变量。来确保初始化的并发安全性。本身就提供了安全性。原创 2024-05-19 22:32:26 · 497 阅读 · 0 评论 -
面试题:对已经关闭的channel进行读写
在Go语言中对已经关闭的channel进行读写,结果会有所不同。原创 2024-05-18 21:31:21 · 411 阅读 · 0 评论 -
非阻塞IO一定是异步IO吗?
非阻塞 I/O 是指在发起 I/O 操作时,调用立即返回,不会阻塞调用线程或进程。如果操作不能立即完成,系统会返回一个特定的错误(通常是 或 ),告诉调用者操作尚未完成,而不是等待操作完成。异步 I/O异步 I/O 是指发起 I/O 操作后,调用立即返回,并且系统会在操作完成时通知调用者,通常通过回调函数、事件或信号。异步 I/O 不需要调用者轮询检查操作是否完成,系统会主动通知调用者。区别与联系非阻塞 I/O 不一定是异步 I/O:非阻塞 I/O 只是确保调用立即返回,但调用者需要自己检查操作原创 2024-05-18 21:10:31 · 400 阅读 · 0 评论 -
Golang中HTTP包的内存泄漏
如果你的HTTP HANDLER需要很长时间才能完成,例如因为需要进行复杂的计算或者等待其他资源,这可能会导致大量的协程被阻塞,消耗大量的内存。因此,这种情况下可以考虑使用一些异步处理的方式,比如将任务放入队列,或者使用。最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。包适用于处理HTTP请求和相应的库,但如果使用不正确,可能会导致内存泄漏。原创 2024-05-15 17:16:52 · 614 阅读 · 0 评论 -
goroutine调度策略
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。语言可以有效地利用硬件资源,处理大量的并发任务,同时也为复杂的并发编程提供了简介的语言级别的支持。的调度器采用了工作窃取(Work Stealing)和手动抢占(Preemption)的策略。调度器的主要任务就是N个OS线程上调度M个。),而N代表的事内核级别的线程。调度器使用了三种队列来管理。原创 2024-05-14 22:39:02 · 343 阅读 · 0 评论 -
Golang的select底层数据结构与特性
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。关键字用于处理同时来自多个通道的数据。它的基本工作原理是“随机选择”满足条件的分支去执行。如果没有分支满足条件(即所有通道都无法读/写),分支,包含了通道和对应的操作类型(发送或者接收)。同时,它还会使用一个名为。会阻塞,直到有分支满足条件。分支,当其他分支都不满足条件时,的结构体来表示通道的内部结构。原创 2024-05-13 19:52:09 · 371 阅读 · 0 评论 -
Go语言中context原理及使用
Golang中,context为我们提供了在跨API边界和进程之间传递请求作用域的deadline,取消信号,和其他请求响应的值的能力。context包定义了Context类型,它在API边界和进程之间提供了一种传递传递请求作用域的deadline,取消信号,和其他请求响应的值的能力。一个Context的生命周期通常与请求处理的生命周期相同,并且可以包含在多个API调用和goroutine之间共享数据和取消信号。context。原创 2024-05-10 22:02:04 · 480 阅读 · 0 评论 -
面试题:简述Go的垃圾回收机制
Go的机制主要是用来自动释放不再被程序使用的内存,以防止内存泄漏。Go的垃圾回收是的,也就是说,它在主程序运行的同时进行垃圾回收。原创 2024-05-09 23:00:02 · 522 阅读 · 0 评论 -
Go有无缓冲channel的区别
以下是一个使用示例,无缓冲的情况下,发送操作会阻塞,因此打印操作也无法执行,直到接收操作完成;而有缓冲的情况下,发送操作不会阻塞,所以会继续向下执行打印操作。提高了一种强同步的通信机制,发送和接收操作在完成数据交换的时候都会阻塞,确保了数据在不同的。接收数据的时候,如果缓冲区有数据,接收操作会被立刻返回,否则接收操作会阻塞,直到有另一个。时,如果缓冲区未满,发送操作就会立刻返回,否则发送操作会阻塞,直到有另一个。中接收数据时,如果没有数据可以接收,接收操作也会被阻塞,直到有另一个。的默认类型就是无缓冲的。原创 2024-05-08 22:05:08 · 491 阅读 · 0 评论 -
面试题:Go协程泄漏原因及解决方法
协程泄漏(Goroutine Leakage)是指那些已经没有任何用处(不再被使用或者无法到到达其执行路径),但由于某些原因未被收回的goroutine。这些泄漏的goroutine占用内存资源,可能会随着程序运行时间的增长而累积,最终导致内存耗尽或者程序性能下降。原创 2024-05-07 20:43:53 · 1570 阅读 · 0 评论 -
Go限制运行时操作系统线程数量
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。程序可以使用的操作系统线程数量,但最好不要轻易设置这个值,因为正常情况下,可以在N个操作系统上进行调度。我们可以通过设置环境变量。会自己觉得使用的线程数以保证运行时最高的效率和性能。语言的运行时系统使用了自己的调度器,该调度器使用了。核数非常多而且都处于高负载的机器上,防止。程序可以使用的操作系统数。原创 2024-05-05 22:43:36 · 523 阅读 · 0 评论 -
Go语言中的map使用及并发安全
首先,Go语言的map底层是哈希表,而C++的map的底层是红黑树,C++的的底层才是哈希表。所以增删改查的时间复杂度都是O(1)。map是引用类型,如果两个map同时指向一个底层,那么一个map的变动会影响到另一个map,这一点需要特殊注意。map的零值(Zero Value)是nil,对nilmap进行任何添加元素的操作都会触发运行时错误(panic因此,使用必须先创建map,使用make的键可以是任何可以用==或!操作符比较的类型,比如字符串、整数、浮点数、复数和布尔类型等。但是,slicemap。原创 2024-04-30 23:37:11 · 648 阅读 · 0 评论 -
如何解决Go中uint类型溢出问题
GouintGo。原创 2024-04-29 23:33:39 · 847 阅读 · 0 评论