刷新
Go 的函数,方法和接口

博主头像 函数 (function) 函数可以没有参数或者接受多个参数。 当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。 func add(x, y int) int { return x + y } 函数(或者变量)的名称以大写字母开头时,它就是已导出的。 函数可以返回任意 ...

errgroup的常见误用

博主头像 errgroup想必稍有经验的golang程序员都应该听说过,实际项目中用过的也应该不在少数。它和sync.WaitGroup类似,都可以发起执行并等待一组协程直到所有协程运行结束。除此之外errgroup还可以在协程出错时取消当前的context,以及它还能控制可运行的协程的数量。 但在日常的代码 ...

Golang并发控制方式有几种?

博主头像 Go语言中的goroutine是一种轻量级的线程,其优点在于占用资源少、切换成本低,能够高效地实现并发操作。但如何对这些并发的goroutine进行控制呢? 一提到并发控制,大家最先想到到的是锁。Go中同样提供了锁的相关机制,包括互斥锁sync.Mutex和读写锁sync.RWMutex;除此之外G ...

Mygin实现分组路由Group

博主头像 本篇是Mygin第五篇 目的 实现路由分组 为什么要分组 分组控制(Group Control)是 Web 框架应该提供的基础功能之一,对同一模块功能的开发,应该有相同的前缀。或者对一部分第三方接口,统一需要加解密等功能。分组后很方便。例如: 对于任务模块,统一前缀为/task 除去/user/lo ...

Java开发者的Golang进修指南:从0->1带你实现协程池

博主头像 当然,我写的简易版协程池还有很多可以优化的地方,比如可以实现动态扩容等功能。今天我们要简单总结一下协程池的优势,主要是为了降低资源开销。协程池的好处在于可以重复利用协程,避免频繁创建和销毁协程,从而减少系统开销,提高系统性能。此外,协程池还可以提高响应速度,因为一旦接收到任务,可以立即执行,不需要等... ...

Go 语言中 defer 使用时有哪些陷阱?

博主头像 大家好,我是 frank ,「 Golang 语言开发栈」公众号作者。 01 介绍 defer 的使用方式是在其后紧跟一个函数调用或方法调用,确保在其所在的函数体返回之前执行其调用的函数或方法。 在 Go 语言中,defer 一般用于资源释放,或使用 defer 调用一个匿名函数,在匿名函数中使用 ...

Golang之文件系统事件监听

Golang之文件系统事件监听 基本介绍 文件系统事件是指文件系统相关的各种操作和状态变化,当一个应用层的进程操作文件或目录时,会触发system call,内核的notification子系统可以守在那里,把该进程对文件的操作上报给应用层的监听进程。这些事件可以包括文件和目录的创建、修改、删除和文 ...

Gin 框架之用户密码加密

博主头像 目录一、引入二、密码加密位置三、如何加密四、bcrypt 库加密4.1 介绍4.2 优点:4.3 使用五、小黄书密码加密实践 一、引入 Gin是一个用Go语言编写的Web框架,而用户密码的加密通常是在应用程序中处理用户身份验证时的一个重要问题。 通常敏感信息你要防两类人: 研发人员:包括你自己和你的 ...

golang chan传递数据的性能开销

博主头像 这篇文章并不讨论chan因为加锁解锁以及为了维持内存模型定义的行为而付出的运行时开销。 这篇文章要探讨的是chan在接收和发送数据时因为“复制”而产生的开销。 在做性能测试前先复习点基础知识。 本文索引 数据是如何在chan里流动的 情况1:发送的数据有读者在读取 情况2:发送的数据没有读者在读取 ...

Mygin 实现简单Http

博主头像 本篇是完全参考gin的功能,自己手动实现一个类似的功能,帮助自己理解和学习gin框架。 目的 简单介绍net/http库以及http.Handler接口 实现简单路由请求的功能 标准库启动Web服务 先看用标准库怎样启动一个web服务 import "net/http" func helloHand ...

以 Golang 为例详解 AST 抽象语法树

博主头像 前言 各位同行有没有想过一件事,一个程序文件,比如 hello.go 是如何被编译器理解的,平常在编写程序时,IDE 又是如何提供代码提示的。在这奥妙无穷的背后, AST(Abstract Syntax Tree)抽象语法树功不可没,他站在每一行程序的身后,默默无闻的工作,为繁荣的互联网世界立下了汗 ...

Go 语言为什么不支持并发读写 map?

博主头像 大家好,我是 frank ,「 Golang 语言开发栈」公众号作者。 01 介绍 在 Go 语言项目开发中,我们经常会使用哈希表 map,它的时间复杂度是 O(1),Go 语言中的 map 使用开放寻址法避免哈希碰撞。 Go 语言中的 map 并非原子操作,不支持并发读写操作。 Go 官方认为 m ...

Gorm 关联关系介绍与基本使用

博主头像 目录一 Belongs To(一对一)1.1 Belongs To1.2 重写外键1.3 重写引用(一般不用)1.4 Belongs to 的 CRUD1.5 预加载1.6 外键约束二、Has One2.1 Has One2.2 重写外键2.3 重写引用2.4 多态关联2.5 Has One 的 C ...

如何基于 Gin 封装出属于自己 Web 框架?

博主头像 思路 在基于 Gin 封装出属于自己的 Web 框架前,你需要先了解 Gin 的基本用法和设计理念。 然后,你可以通过以下步骤来封装自己的 Web 框架: 封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己的需求,封装出符合应用的业务需求的路由。你可以考虑将路由 ...

Gorm 数据库表迁移与表模型定义

博主头像 目录一、Docker快速创建MySQL实例1.1 创建1.3 创建数据库二、AutoMigrate介绍与使用2.1 AutoMigrate介绍2.2 AutoMigrate 基本使用三、模型定义3.1 模型定义3.2 快速增删改查3.3 约定3.4 gorm.Model四、表模型主键、表名、列名的约 ...

Gorm 入门介绍与基本使用

博主头像 Gorm 入门介绍与基本使用 目录Gorm 入门介绍与基本使用一、ORM简介1.1 什么是ORM1.2 使用ORM的好处1.2.1 避免直接操作SQL语句1.2.2 提高代码的可维护性1.2.3 跨数据库兼容性1.3 使用ORM的缺点1.3.1 学习成本1.3.2 性能开销1.4 ORM解析过程1. ...

golang 并发

博主头像 Golang 并发 并行 指的是在同一时刻 有多条指令在多个CPU处理器上同时执行 2个任务2个窗口需要硬件支持 并发是指在同一时刻 只能有一条指令 单多个进程指令快速轮换执行 2个队伍1个窗口 要求提升软件能力 Golang 并发优势 go 从底层就支持并发 简化了并发程序的编写方法 Gorout ...

<1···345···19>