随笔分类 -  golang

摘要:1. Map 的主要结构 map 的底层数据结构定义在 Go 源码的 runtime 包中,其核心结构体是 hmap。Go 的 map 使用 哈希表 存储键值对,并结合了**桶(bucket)**机制来优化存储和查找。 hmap 的主要字段 count:存储的键值对数量。 buckets:哈希桶的数 阅读全文
posted @ 2024-11-28 22:42 若-飞 阅读(56) 评论(0) 推荐(0) 编辑
摘要:在Go语言中,自定义类型可以帮助我们更好地组织代码和增强可读性。在本篇博客中,我们将探讨如何创建一个自定义类型,并将其与Swagger文档集成,以便在API中正确序列化和展示。 1. 创建自定义类型 首先,我们定义一个名为 RechargeType 的自定义类型。这个类型将用于表示不同的充值方式。 阅读全文
posted @ 2024-11-14 11:16 若-飞 阅读(46) 评论(0) 推荐(0) 编辑
摘要:在 Go 编程中,切片是一种非常常用的数据结构。理解如何正确地修改切片中的元素非常重要,特别是当我们需要更改这些元素的值时。在这篇文章中,我们将探讨在切片中修改元素的不同方法,并讨论何时使用值切片和指针切片。 1. 使用值切片 在 Go 中,使用值切片(例如 []wmsModel.OrderProd 阅读全文
posted @ 2024-10-31 11:18 若-飞 阅读(12) 评论(0) 推荐(0) 编辑
摘要:1、Golang中死锁的触发条件 1.1 书上关于死锁的四个必要条件的讲解 发生死锁时,线程永远不能完成,系统资源被阻碍使用,以致于阻止了其他作业开始执行。在讨论处理死锁问题的各种方法之前,我们首先深入讨论一下死锁特点。 必要条件: 如果在一个系统中以下四个条件同时成立,那么就能引起死锁: 互斥:至 阅读全文
posted @ 2024-09-09 13:48 若-飞 阅读(29) 评论(0) 推荐(0) 编辑
摘要:在现代金融系统的开发过程中,涉及的数据处理和业务逻辑异常复杂,要求开发者不仅需要掌握基础的编程技术,还需要理解和应用一些高级的技术和策略。本文将探讨在金融系统开发中需要关注的关键知识点,包括事务管理、流水记录、数据一致性、安全性等方面,帮助你构建稳定、安全且高效的金融系统。 1. 事务管理 确保AC 阅读全文
posted @ 2024-08-17 12:20 若-飞 阅读(42) 评论(0) 推荐(0) 编辑
摘要:在 Go 语言中,方法接收者可以是值接收者或指针接收者,而 Go 为开发者提供了一个方便的功能:自动接收者类型转换。这个功能使得我们在调用方法时可以更加灵活,不必担心接收者类型是否完全匹配。然而,尽管这个机制带来了便利,但开发者仍然需要注意方法接收者类型的选择,因为它们在功能、性能以及并发安全性等方 阅读全文
posted @ 2024-08-14 11:59 若-飞 阅读(68) 评论(0) 推荐(0) 编辑
摘要:type TgUser struct { global.GVA_MODEL TelegramId string `json:"telegram_id" form:"telegram_id" gorm:"column:telegram_id;unique;"` Username string `jso 阅读全文
posted @ 2024-07-22 18:06 若-飞 阅读(173) 评论(0) 推荐(0) 编辑
摘要:当在 Go 语言中使用切片时,切片的初始化是一个常见的操作。在本篇博客中,我们将介绍切片的初始化方式以及一些常见的示例。 什么是切片初始化? 切片是一个动态数组,可以根据需要自动调整大小。切片的初始化是为切片分配底层数组并设置切片的长度和容量。切片可以通过字面量、make 函数或从其他切片截取来进行 阅读全文
posted @ 2024-07-09 15:43 若-飞 阅读(173) 评论(0) 推荐(0) 编辑
摘要:在你提供的代码片段中,涉及了变量作用域和闭包的问题,让我们来分析一下为什么输出的是 error2 而不是 error。 func msg() (result string) { err := errors.New("error") defer func() { fmt.Println(err) // 阅读全文
posted @ 2024-07-08 13:39 若-飞 阅读(6) 评论(0) 推荐(0) 编辑
摘要:在 Go 语言中,使用 , 符号可以同时定义多个变量,并且它们可以是不同类型的变量。这种方式称为并行赋值(parallel assignment)。 让我们来看你提供的代码片段: err := errors.New("error") if err != nil { return } // err : 阅读全文
posted @ 2024-07-08 13:36 若-飞 阅读(17) 评论(0) 推荐(0) 编辑
摘要:在Go语言中,defer语句用于延迟执行一个函数直到包含它的函数体执行完毕。在使用defer时,函数的参数会在defer语句执行时被计算,并且函数调用会被延迟执行。 如果你希望在函数返回时调用defer语句,并且想要传递一些参数给defer延迟调用的函数,你可以通过将这些参数先保存在变量中,然后在d 阅读全文
posted @ 2024-07-08 12:03 若-飞 阅读(16) 评论(0) 推荐(0) 编辑
摘要:在Go语言中,我们经常需要将整数转换为字符串。然而,直接使用string()函数进行转换可能会导致意想不到的结果。这是因为string()函数会将整数解释为Unicode字符的代码点,而不是将其转换为对应的数字字符串。 错误的转换方式 例如,如果我们尝试将整数65转换为字符串: s := strin 阅读全文
posted @ 2024-01-20 12:40 若-飞 阅读(65) 评论(0) 推荐(0) 编辑
摘要:做个记录,gorm在更新字段的时候,如果字符串字段是空的,那么将不会更新到数据库。 在使用gorm将一个字段更新为空的时候,发现并不生效,不了解具体什么原因,所以此时需要打开debug模式,查看原生SQL是如何执行的。 type Student struct { Model Email string 阅读全文
posted @ 2024-01-04 10:28 若-飞 阅读(784) 评论(0) 推荐(0) 编辑
摘要:软删除 如果您的模型包含了一个 gorm.deletedat 字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力! 拥有软删除能力的模型调用 Delete 时,记录不会从数据库中被真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过普通的查询方法找 阅读全文
posted @ 2023-12-18 11:59 若-飞 阅读(369) 评论(0) 推荐(0) 编辑
摘要:1,回答问题之前,先看下面这段代码 package main import "fmt" type girl struct { Name string Age int } func main() { gl := make(map[string]*girl) studs := []girl{ {Name 阅读全文
posted @ 2023-12-07 16:33 若-飞 阅读(166) 评论(0) 推荐(0) 编辑
摘要:golang在defer修改返回值时需要格外注意! 如果未提前声明返回值的话,在defer中修改返回值是无效的操作。原因如下: package main func test1() int { i := 1 defer func() { // 实际则是将局部变量i的地址指针传入,调用runtime.d 阅读全文
posted @ 2023-12-07 16:26 若-飞 阅读(386) 评论(0) 推荐(0) 编辑
摘要:在 Go 语言中,函数的参数传递是值传递的方式。当函数被调用时,函数参数的值会被拷贝到函数的参数变量中。 对于指针类型的参数,指针本身也是以值的方式进行传递。这意味着函数内部的指针参数将获得原始指针的拷贝,但这个拷贝仍然指向相同的内存地址。 当在函数内部修改通过指针传递的变量时,由于指针本身是值传递 阅读全文
posted @ 2023-12-04 15:45 若-飞 阅读(76) 评论(0) 推荐(0) 编辑
摘要:准备工作 创建新项目 kratos new helloworld cd helloworld # 拉取项目依赖 go mod download # 项目中的 config 等请自行修改 添加事务 如果您还不了解 Kratos、 mysql 事务 和 GORM 的话请先了解一下。 data 层承载事务 阅读全文
posted @ 2023-11-25 19:37 若-飞 阅读(704) 评论(0) 推荐(0) 编辑
摘要:背景 在看源码时,一些源码方法没有方法体,难道说明这些方法为空?例如:time.Now调用的 now(), time.Sleep , reflect.makechan // Provided by package runtime. func now() (sec int64, nsec int32, 阅读全文
posted @ 2023-09-25 15:21 若-飞 阅读(375) 评论(0) 推荐(0) 编辑
摘要:背景是查询一个有N亿条记录的mysql表 使用go多协程同时查询一个区间的不同数据代码: func txHashesWorker(id int, tasks <-chan Task, results chan<- int, wg *sync.WaitGroup) { defer wg.Done() 阅读全文
posted @ 2023-09-07 23:44 若-飞 阅读(31) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示