- 博客(26)
- 收藏
- 关注
原创 golang context底层设计探究
Context 用于在多个函数、方法、协程、跨 API、进程之间传递信息。于 Go 1.7 版本发布,并纳入到 Go 语言标准库中。它不仅仅可以用于跨 API 场景传递上下文,同时还可以实现级联取消、超时控制等操作。Context 是可以进行嵌套的,一个非顶级或末级的 Context 是拥有其父亲和一个或多个儿子,我们可以把它看作是一个树,也就是 Context 树Go 官方提供了 三个接口的定义 和 四个结构体的实现。
2025-12-27 15:44:10
581
原创 golang中 Context的四大用法
超时时间适合用于任务需要在调用后一定时间内完成的场景, 而截止时间适合用于任务需要在指定时间之前完成的场景。两者都用于控制任务的执行时间,但适用场景有所不同。
2025-12-21 10:08:48
314
原创 waitGroup底层源码分析
本文介绍了Go语言中sync.WaitGroup的基本用法和底层实现。WaitGroup用于等待一组goroutine完成,包含Add()、Done()和Wait()三个核心方法。文章通过示例演示了WaitGroup的典型用法,并详细分析了其底层数据结构在Go 1.13和1.14版本中的差异。重点剖析了Add()方法的源码实现,包括竞态检测、状态检查等关键逻辑。Done()方法实际上是Add(-1)的封装,而Wait()方法会阻塞直到计数器归零。文章还强调了WaitGroup的正确使用方式,如避免并发调用A
2025-12-16 09:35:18
638
原创 MySQL 执行 SELECT 语句的完整流程详解
A[连接器] -->|建立连接/校验权限| B[查询缓存]B -->|命中| Z[返回结果]B -->|未命中| C[SQL解析]C -->|词法/语法分析| D[预处理]D -->|语义校验/重写| E[优化器]E -->|生成执行计划| F[执行器]F -->|调用存储引擎接口| G[返回结果]。
2025-11-22 08:52:00
905
原创 Golang的前世今生(出身名门的后起之秀)
一直到 2009年,Go正式开源了,GO项目团队将 2009.11.10即该语言正式对外开源的私自作为其官方生日,并且发布了官方的吉祥物——土拨鼠,(据说也叫囊地鼠)长下面这样:吉祥物的创作者 芮妮·弗伦奇( Go 语言第一任老大(罗伯·派克)的爱人),还亲手用黏土制作了一个精致的土拨鼠雕塑,使它成为一个独特的创造。并且一直到现在,Go 语言的爱好者们,一直视这只土拨鼠作为 Go 语言的吉祥物。2018年,Go 语言启用了全新的 logo,是一个类似于快速运动中两个轮子的标记,形象的代表速度和效率。
2025-10-18 08:10:26
979
原创 Golang 切片(深入了解切片底层扩容机制,部分源码,测试实战+核心用法)
切片又称动态数组,依托数组实现,可以方便地进行扩容和传递,实际使用时比数组更灵活,正因为灵活,实际使用时容易出错,避免出错的方法之一便是了解其使用原理。
2025-10-12 16:21:40
704
原创 Golang并发通信机制 channel (超详细,干货)
CSP理论是早期被提出的一种并发模型不通过共享内存实现通信,而是通过通信实现内存共享多个进程想交换数据时,直接访问同一块内存区域,数据放在一个共享变量里面,大家来读写,为了保证一致性,需要加锁,不然就会有数据竞争,死锁多个进程不直接操作内存,而是需要的时候通过通信机制例如 channel,消息队列等来传递,这样不会出现数据竞争,因为同一时刻数据的“读写权限”只在一个线程手里,程序员也不用操心锁,channel天然的保证了同步。
2025-10-12 15:34:49
869
原创 defer的代码陷阱,你中招了吗?(一文golang defer详解)
defer 是 go 语言中的一个关键字,用于延迟执行一个函数调用,干函数会在当前函数即将返回之前被调用(无论是正常返回还是因panic导致的返回),多个 defer 语句会按照先进后出的顺序执行。今天给大家主要介绍了关于defer的一些知识点,defer的来由、定义、结构、优化过程、代码举例、开放编码等等,大家下去也可以再深入了解一下,有什么问题和想法欢迎随时在评论区交流!大学生讲解Golang defer执行过程、代码陷阱、优化过程,一文轻松搞懂defer全部内容_哔哩哔哩_bilibili。
2025-09-18 14:57:02
958
1
原创 进程、线程与协程详解
类比:海底捞内,【传菜员】【服务员】【后厨】是三个线程 —— 它们共享海底捞的食材(内存)、锅具(CPU),但分别负责 "上菜","接待顾客","炒菜",传菜员不会抢后厨的锅,但能快速配合完成一桌 meal。类比【海底捞】和【麦当劳】是两个独立进程 —— 它们各自有独立的厨房(内存)、食材储备(文件)、收银系统(CPU),互不干扰。同一进程内的线程共享进程的资源(如内存、文件)。进程内的 "执行单元",共享进程资源(如餐厅的食材、设备),但负责不同任务(如传菜、点单、清洁)。
2025-08-16 08:46:24
1126
6
原创 计算机网络——UDP
① UDP 是一种在网络通信中使用的传输层协议,是一个简单的、面向无连接的协议,② UDP用于将数据从一个应用进程发送到另一个应用进程,并在此过程中不提供可靠的数据传输保障无连接:1. 通信之前不建立,通信之后也不释放任何连接(专属通道):把每个数据包当独立快递包裹,直接扔出去就算完成任务,不建立,不维护,也不拆除任何长连接不可靠:2 发送端发出去的消息在网络传输中一旦丢失,接收端将收不到这个消息引入问题:为什么TCP就比UDP可靠?请看下文。
2025-07-31 11:39:44
1105
6
原创 Go内存逃逸(一文搞懂)
编译器将原本应该分配到栈上的变量,分配到了堆上(延长了变量的生命周期,在编译阶段完成)在Go语言中,Go程序会在两个地方为变量分配内存,一个是全局的堆空间,另一个是栈空间1.栈空间:函数调用的参数,返回值以及小类型局部变量大都会被分配到栈上,这部分内存会由编译器进行管理,无需GC的标记2.堆空间:全局变量,大对象,逃逸的变量会被分配到堆上,go运行时GC就会在后台将对应的内存进行标记从而能够在垃圾回收的时候将对应的内存回收,进而增加了开销。
2025-07-09 15:13:55
1138
6
原创 一文搞懂 Gorm框架 基础操作
dao.Init()Age: 18,//添加操作1.指针类型是为了更好的存null类型,但是传值的时候,也记得传指针2.Create 接收的是一个指针,而不是值由于传递的是一个指针,调用完 Create 之后,student 这个对象上面就有该记录的信息了,如创建的id。
2025-06-20 21:14:56
431
原创 Go web 用户管理系统(部分前后端代码+项目功能展示)
主要功能分为上述五个部分,其他小的细节不再赘述二、项目架构项目结构主要基于MVC三层架构模式主要分为三层:controller层:用于接收前端传过来的数据service层:用于数据逻辑的处理,为controller层服务dao层:主要用于项目与数据库的交互,为service层服务除此之外,项目还有专门存放参数的model层;存放用来响应前端数的据的pkg层;存放前端页面代码的view层;存放图片的uploads层本次讲述的项目主要是围绕用户的登录注册,增删改查等功能展开实现的。
2025-05-18 16:57:42
679
1
原创 大模型基础知识(LLM、Transformer、Prompt、MCP)
LLM基本概念是用于做自然语言相关任务的深度学习模型,给模型一些输入,可以返回相应的输出;大语言模型首先需要通过大量文本,进行。,它的训练数据有多个互联网文本语料库。覆盖了 线上书籍,新闻文章,科学论文,维基百科,社交媒体帖子 等等,借助海量的训练文本数据,模型能更多了解单词与上下文之间的关系,从而更好理解文本含义,从而给出更精准的预测。,不仅是训练数据巨大,而是参数数量巨大,参数,是模型内部的变量,可以理解为是模型在训练过程中学到的知识,参数决定了模型如何对输入数据作出反应,从而决定模型的行为。
2025-05-08 15:56:16
534
原创 网络编程——心跳检测
在网络编程中,心跳检测是一种可用于检测网络连接状态的技术,用于确保连接的活跃性并检测连接是否中断,通过定期发送心跳消息,来保证通信的可靠性。
2025-02-06 15:12:59
569
原创 go map 底层详解(基础语法、底层实现、扩容机制)
以上就是关于go map的所有内容,如有没涉及到的或者是大家觉得不正确的地方,欢迎评论区留言或者私信作者。
2025-01-22 19:42:03
1208
原创 基本回溯算法介绍
/调用回溯算法returnres;//返回正确的结果以上就是回溯最基本的过程,欢迎大家在评论区留言,也可以私信问作者,希望大家有所收获。
2025-01-19 21:41:53
352
原创 蒙特卡罗方法 (Python)
蒙特卡罗方法在生活中还有其他应用,比如积分的计算,大家感兴趣的可以私信作者哦,也欢迎在评论区留言。numberOfTrails = int(1e9)#科学技术法。
2024-11-03 16:19:06
425
原创 go语言中的切片扩容
append函数会分配一个新的底层数组,将原切片的元素以及新追加的元素复制到新的数组中,并返回这个新切片的引用。append函数会在原切片的基础上追加元素,并返回原切片的引用(即指向同一个底层数组)。所以上述计算出来的map(最终)是个估计值,大部分情况下是等于最终结果的,极少情况下不等于,但是相差也不大。map(最终) = map(初始) + ( map(初始) + 3*256 )/4。map(最终) = map(初始) + map(扩的容量)map(最终) = 2*map(初始)
2024-10-27 08:26:46
397
3
原创 JS入门 + 作品
JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互效果1.网页特效 2.表单验证 3.数据交互(获取后台数据,渲染到前端) 4.服务器编程(node.js)对象是一种数据类型无序的数据的集合(1)对象名.属性名 obj.age(2)对象名['属性名'] obj['age']//当属性名是字符串时(6)对象中的方法。
2024-08-14 21:35:04
1324
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅