Go语言之Context详解

1. 基本概念 1.1 什么是 Context上下文 `context.Context` 在 Go 语言中用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与 Goroutine 有比较密切的关系,是 Go 语言中独特的设计,在其他编程语言中我们很少见到类似的概念。主要用于超时控制和多Goroutine间的数据传递。注:这里的数据传递主要指全局数据,如 链
阅读全文

WaitGroup底层原理

WaitGroup核心组件`WaitGroup` 结构体内部主要包含以下两个核心部分(在较新的 Go 版本中,实现有所优化,但基本思想一致):1. `counter` (计数器):这是一个整数,用来记录需要等待的 goroutine 的数量。 当我们调用 `Add(n)` 方法时,这个计数器会增加 `n`。 当我们调用 `Done()`
阅读全文

Go语言之防缓存击穿利器 Singleflight

Go语言之防缓存击穿利器 Singleflight 1. 缓存击穿在日常开发中,为了提升性能和减轻数据库的压力,通常会对热点数据进行缓存。例如,使用 Redis 缓存用户请求的数据,如果缓存中有数据则直接返回,否则查询数据库并将结果写入缓存。但是,如果缓存失效了,在查询数据库和将数据再次写入缓存的过程中,其他请求也会出现缓存未命中的情况,导致大量请求直接打到数据库,给数据
阅读全文

Golang sync.Mutex源码解析

Golang sync.Mutex源码解析Go 语言在 `sync` 包中提供了用于同步的一些基本原语,`sync.Mutex` 就是其中最常用的一个。 1. 基本结构Go 语言的 `sync.Mutex` 由两个字段 `state` 和 `sema` 组成。其中 `state` 表示当前互斥锁的状态,而 `sema` 是用于控制锁状态的信号量。```go//
阅读全文

Golang Channel源码解析

Golang Channel源码解析 1. 概述Golang官方对 `chan` 的描述如下: A channel provides a mechanism for concurrently executing functions to communicate by sending and receiving values of a specified element t
阅读全文

Golang中的Map数据结构

Golang中的Map数据结构在Go语言中,`map`是一种非常强大的数据结构,它提供了键值对的存储和快速查找功能。本文将详细介绍Go语言中`map`的数据结构、实现原理和常见操作。 一、Map的数据结构Go语言中的`map`数据结构由`runtime/map.go`中的`hmap`定义:```gotype hmap struct { count
阅读全文

GORM(四)之链式方法、钩子和事务

GORM深度解析:链式方法、钩子和事务 引言在Go语言的生态系统中,GORM作为一个功能强大的ORM库,为开发者提供了一种简洁而直观的方式来操作数据库。本文将深入探讨GORM的三个核心特性:链式方法、钩子(Hooks)和事务(Transactions
阅读全文

GORM(三)之上下文、错误处理与链式方法

GORM技术深度解析:上下文、错误处理与链式方法 引言GORM,作为Go语言中广受欢迎的ORM库,以其简洁的API和强大的功能,为开发者提供了便捷的数据库操作方式。本文将深入探讨GORM的三个核心特性:上下文支持、错误处理和链式方法。通过实际的代码示例,我们将展示如何在Go应用程序中有效地利用这些特性。 上下文支持(Context)在Go语言中,上下文(Conte
阅读全文

GORM(二)入门之关联

Golang Gorm 关联使用指南上篇文中介绍了gorm的安装和基本使用,本章我们将探讨如何在 Go 语言的 GORM 库中使用各种类型的关联,包括 Belongs To、HasOne、Has Many 以及 Many To Many。我们还会介绍关联模式和预加载的概念,并通过实例代码来展示它们的具体用法。 1. Belongs Tobelongs to 会与另一个模型建立了一
阅读全文

golang 版本升级

如何优雅的将本地的golang 版本升级到更高版本
阅读全文