随笔分类 - Golang
摘要:当涉及到连接不同类型的数据库时,可以用常见的方式去连接对应的数据库,也可以使用接口抽象的方式使代码更具灵活性和可扩展性,更显优雅。 非接口抽象方式: 如果涉及到多种数据库时,同样的代码显得非常臃肿。 package main import "fmt" // 直接定义 MySQL 连接和插入函数 fu
阅读全文
摘要:1、慎用CreatedAt、UpdatedAt和DeletedAt字段 数据库设计字段时要避开这created_at、updated_at、deleted_at字段,因为被框架本身使用了,建议改为created_time、updated_time和deleted_time。 数据插入时,仅仅插入业务
阅读全文
摘要:在Web开发中,经常需要将数据存储到数据库中以便进行管理和处理。gosqlite3是一个轻量级的sqlite3驱动,它为Golang提供了快速、稳定的sqlite3支持。 package main import ( "database/sql" "fmt" "log" _ "github.com/m
阅读全文
摘要:1.函数返回局部指针变量 func Add(x,y int) *int { res := 0 res = x + y return &res } func main() { Add(1,2) } 函数返回局部变量是一个指针变量,该函数执行结束,对应栈帧就会销毁,但是引用返回到函数外部,如果外部解析地
阅读全文
摘要:一、什么是 Work StealingGo语言的 Work Stealing 机制是一种用于调度协程(Goroutines)的策略,有助于充分利用多核CPU,提高并发性能,降低锁竞争,从而使Go程序更高效地运行 Work Stealing 机制的核心思想:每个操作系统线程(M)都有一个本地任务队列,
阅读全文
摘要:一 、概念基础1.1三色标记法将对象分为三类把图过程中遇到的对象,按“是否访问过”这个条件标记成以下三种颜色: 1.白色对象(可能死亡):未被回收器访问到的对象。在回收开始阶段,所有对象均为白色,当回收结束后,白色对象均不可达。 2.灰色对象(临时状态):已被回收器访问到的对象,但回收器需要对其中的
阅读全文
摘要:一、逃逸分析 内存逃逸分析是编译器在编译优化时,用来决定变量应该分配在堆上还是栈上的工具。 了解内存逃逸分析的原理后,就能够理解什么样的变量会被分配在栈上、什么样的变量会被分配在堆上。 当你的程序对性能非常敏感,就可以使用内存逃逸工具的分析,查看哪些变量逃逸到了堆上,哪些没有逃逸。然后调整代码,再次
阅读全文
摘要:为了让程序员更好地专注于业务代码的实现,Go 语言增加了垃圾回收机制,自动地回收不再使用的内存。Go 语言有两部分内存空间:栈内存和堆内存。 1. 栈内存【栈是一种运算受限的线性表,连续储存,其限制是指只仅允许在表的一端进行插入和删除操作】栈只允许往线性表的一端放入数据,之后在这一端取出数据,按照后
阅读全文
摘要:等待一个协程组全部正确完成则结束;但其中一个协程发生错误,这时候就会阻塞,全部停止运行(本次任务失败)以免浪费系统资源,此时可以结合通道(channel)或者 select 语句两种方式来处理。 1、考虑使用两个通道:一个用于报告错误,另一个用于通知所有协程停止。在协程内部捕获错误,并将错误信息发送
阅读全文
摘要:线程安全是什么 线程安全是指在多线程环境下,程序的执行能够正确地处理多个线程并发访问共享数据的情况,保证程序的正确性和可靠性。 type StringHeader struct { Data uintptr //存放指针,其指向具体的存储数据的内存区域 Len int //字符串的长度 } 并发访问
阅读全文
摘要:从 0 到 1 1、设计表结构2、使用 gf gen dao 生成对应的 dao/do/model3、编写 api 层:定义业务侧数据结构,提供对外接口的输入/输出数据结构4、编写 model 层:定义数据侧数据结构,提供对内的数据处理的输入/输出数据结构5、编写 logic 层,自动生成 serv
阅读全文
摘要:1、Go 语言的 if 语句允许在条件之前传递一个语句。 原始代码: f, contains := factory[string(token)] if contains { // Do something } 优化:(稍微提高了代码的可读性) if f, contains := factory[sT
阅读全文
摘要:▶︎ 后台基础(初级):掌握牢固的后台基础(go、os、http、tcp、ip...)并能熟练运用,为后面的发展打下地基。 ▶︎ 工程素养(中级):写出一手好代码,有扎实的微服务工程能力,用云原生DevOps持续提升工程效率。 ▶︎ 项目架构(高级):有扎实严谨的系统架构设计能力,独立主导大中型项目
阅读全文
摘要:context.Background():上下文的默认值(创建上下文的默认起点),这个函数返回一个空context,返回值就是根节点,这只能用于最高等级(在main函数、初始化或顶级请求处理中),因为所有其他的上下文都应该从它衍生(Derived)出来 context.TODO():通常用作占位符或
阅读全文
摘要:查看文档:https://open.dingtalk.com/document/robots/custom-robot-access 1、在钉钉群中创建一个机器人,获取机器人的 Webhook 地址。可以参考钉钉官方文档来创建机器人并获取 Webhook 地址。 2、使用 Go 语言的 HTTP 请
阅读全文
摘要:1. 多态多态是指根据类型的具体实现采取不同行为的能力。如果某个类型实现了某个接口,那么所有使用这个接口的地方,都可以支持这种类型的值。即不同的数据类型的实体实现提供统一的接口。Go中没有类的概念,它的多态是靠接口来实现的。 2.举例有这样一个场景,我们在应用开发中涉及到很多通知事件,通知的类型可以
阅读全文
摘要:在使用go-sql-driver/msqyl驱动过程中,偶现invalid connection错误,字面上看就是无效连接的意思。 开始以为是数据库压力问题或是网络不好,后来发现服务器和数据库是走内网的,网络出现问题几率非常小;只是在测试服务器上跑,没多少连接,不存在压力问题。 golang数据库驱
阅读全文
摘要:HTTP 调用需要通过 http 包里的 Client 结构体里的 Do 方法去实现,因此需要先声明一个 Client 结构体变量,该结构体可以设置超时时间等配置。 对于一个请求里的 URL,查询参数,请求 method 等参数,需要 http 包里的 Request 结构体去封装。我们可以通过 N
阅读全文
摘要:在消息队列系统中,生产者负责发送消息到消息队列中,而消费者负责从消息队列中接收并处理消息。在生产者发布消息时,为了确保消息被成功发送到消息队列,可以使用生产者发布确认模式。该模式允许生产者在消息被确认(即成功接收)或者未确认(发送失败)时得到通知,从而确保消息的可靠性。 主要步骤如下: 连接到Rab
阅读全文
摘要:为什么需要连接池 每个连接建立时都会申请内存用来做socket buffer 每个连接都要做三次握手四次挥手 每个连接关闭时都要释放内存空间 在高并发场景下,由于没有连接池的最大连接数限制,可以创建无数个连接,耗尽文件描述符 并发高时,会产生大量的连接,影响系统调度,会占用太多系统资源 连接池设计基
阅读全文
浙公网安备 33010602011771号