sync 包中的主要同步原语在 Go 语言中,sync 包提供了用于并发编程的同步原语,帮助我们管理 goroutine 之间的协作和数据共享。理解并正确使用这些原语对于编写高效且并发安全的 Go 程序至关重要。
sync 包中包含了多种用于不同同步场景的类型:
1. sync.Mutex:互斥锁Mutex(Mutual Exclusion Lock,互斥锁)是 Go 中最基本的同步原语,用于保护共享资源,确保在任何给定时间只有一个 goroutine 可以访问该资源。这有效地防止了竞争条件(race condition)。
工作原理:
Lock():获取锁。如果锁已被其他 goroutine 持有,当前 goroutine 将阻塞,直到获取到锁。
Unlock():释放锁。释放后,其他等待的 goroutine 可以尝试获取锁。
使用场景:
保护共享内存区域,如全局变量、结构体字段、map 或 slice。
防止并发修改导致的数据损坏或不一致。
示例:保护共享计数器
1234567891011121314151617181920212223242526272829303132 ...
配置官网资料hexo官网配置参考hexo 指令
主题 anzhiyu 配置参考安知鱼主题
基础命令打开本地调试
123456789101112// cmdhexo cleanhexo serverorhexo cl && hexo sor// vscodehexo cl; hexo s
推送更改
12345678910111213// cmdhexo cleanhexo generatehexo deployorhexo clean && hexo generate && hexo deployor// vscodehexo cl && hexo g && hexo dhexo cl; hexo g; hexo d
设置标签页和分类页
基础流程新增
给出原始md文档,移入./source/_posts中
在md开头加入yaml配置信息,字段参考front-matter
1234567891011121314151617181920---title: 我的第一篇 Hexo 文章date: 2025-06- ...
Viper 极简配置读取指南Viper 是 Go 语言中一个非常方便的配置库。如果你想从文件中读取配置,并将其映射到 Go 结构体以便于类型安全的调用,Viper 能轻松搞定。
1. 安装 Viper首先,确保你的项目安装了 Viper
1go get github.com/spf13/viper
2. 准备配置文件Viper 支持多种配置文件格式,比如 YAML、JSON、TOML 等。我们以 YAML 格式为例,创建一个名为 config.yaml 的文件在你的项目根目录下:
12345678910# config.yamlserver: port: 8080 name: MyWebAppdatabase: host: localhost user: admin password: supersecret # 这个 timeout 字段在结构体中会用到,如果配置文件没有,会用结构体的默认值 timeout_seconds: 10
3. 编写 Go 代码读取配置并绑定到结构体下面是一个简单的 Go 程序,演示了如何使用 Viper 读取 config.yaml 文件 ...
你好,我是 Leonardo King!很高兴你能来到我的博客!在这里,我想简单介绍一下自己。
我是一名软件工程专业的大学生,目前正沉浸在代码的世界里,努力学习各种软件开发知识,希望能成为一名优秀的开发者。
我的学习旅程在大学期间,我积极探索着在深入学习 Vue.js 框架,享受着将设计稿变为互动界面的乐趣。在后端方面,我正尝试使用 Gin 框架进行实践,学习软件开发的各个领域。我对全栈开发充满热情,目前正习如何构建高效稳定的服务。
当然,我的学习之路远不止于此。我掌握了 Java、Python、C/C++ 等编程语言的基本使用,它们是我解决问题和实现创意的基础工具。通过这些语言,我尝试过数据结构与算法、小型项目开发等,不断巩固自己的编程能力。
为什么建立这个博客?建立这个博客,是希望能够记录下我的学习过程、遇到的问题以及解决方案,也会分享一些供学习使用的资源和工具,希望能对你们有所帮助。我相信,通过分享和总结,能让我对知识有更深刻的理解。同时,也期待能与志同道合的朋友们一起交流、共同进步!
期待与你共同进步!无论是前端的酷炫特效,后端的稳定架构,还是算法的精妙设计,我都保持 ...
Go 结构体标签(Struct Tags)详解Go 语言中的结构体标签(struct tags)是一种强大的元数据机制,允许开发者为结构体的字段附加额外的信息。这些信息在运行时可以通过反射机制获取,并通常由第三方库解析和使用,以实现数据序列化、ORM 映射、参数绑定和验证等功能。
标签的定义方式是在结构体字段的类型后面使用反引号``包裹键值对,格式为 key:"value"。多个键值对之间用空格分隔,例如:json:"name" binding:"required"。
在 Web 项目中,结构体标签的应用尤为广泛,以下是常见的几种标签及其详细用法:
1. json 标签:控制 JSON 编解码json 标签用于控制结构体与 JSON 格式数据之间的序列化(编码)和反序列化(解码)行为。
常见用法:
字段重命名: 将结构体字段名映射为 JSON 中的不同字段名。
1234type User struct { Name string `json:"username"` // 在 JSON 中,这 ...
Redis 的使用Redis 是一个开源的(BSD 许可)内存数据结构存储,可用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。在 Gin 框架中集成 Redis 可以极大地提高应用程序的性能和可扩展性。
本教程将介绍如何在 Gin 应用程序中连接 Redis、进行基本操作(如设置和获取键值)、以及如何使用 Redis 进行会话管理和缓存。
1. 环境准备在开始之前,请确保您的开发环境已准备就绪。
1.1 安装 Go Redis 客户端我们将使用 go-redis/redis/v8 库作为 Redis 客户端。它是 Go 语言中最流行和功能最丰富的 Redis 客户端之一。
1go get -u github.com/go-redis/redis/v8
1.2 安装和运行 Redis 服务器您可以通过多种方式安装和运行 Redis 服务器:
Docker (推荐):最简单快捷的方式。
123docker run --name my-redis -p 6379:6379 -d redis/redis-stack-server:latest ...
GORM 数据库操作速查手册GORM 是 Go 语言中一个功能强大的 ORM (Object-Relational Mapping) 库。它提供了简洁的 API 来操作数据库,支持多种数据库(如 MySQL, PostgreSQL, SQLite, SQL Server 等)。
本文档将介绍 GORM 的常用操作:插入 (Create)、查询 (Retrieve)、更新 (Update) 和删除 (Delete),并演示如何将查询结果赋值给 Go 语言的变量。
准备工作在开始之前,确保你已经安装了 GORM 和相应的数据库驱动。
12go get -u gorm.io/gormgo get -u gorm.io/driver/sqlite # 示例中使用 SQLite,你可以替换为其他数据库驱动
数据库连接与模型定义首先,我们需要建立数据库连接和定义一个数据模型。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 ...
Go 项目工程化指南本文档旨在提供 Go 语言项目从零开始创建、管理依赖以及协作开发时可能遇到的工程性问题的解决方案。
1. Go 项目的创建与初始化Go 语言的项目管理主要依赖于 Go Modules。从 Go 1.11 开始引入,并在 Go 1.16 成为默认。
1.1 初始化一个新的 Go Modules 项目在你的工作目录下,创建一个新的项目文件夹,并进入该文件夹。
12mkdir my-go-projectcd my-go-project
然后,运行 go mod init 命令来初始化 Go Module。这会在当前目录生成一个 go.mod 文件。
1go mod init your_module_name # 建议使用你的域名/用户名/项目名作为模块名,例如: github.com/your-username/my-go-project
go.mod 文件是 Go Modules 的核心,它定义了项目的模块路径、Go 版本以及项目的所有依赖。
1.2 Go 项目基本结构一个典型的 Go 项目结构如下:
12345678910111213141516171819202 ...
Gin Web FrameworkGin 是一个用 Go 语言编写的 HTTP Web 框架,它以其高性能和低内存占用而闻名。Gin 具有类似 Martini 的 API,但性能更好,这得益于其高度优化的 HTTP 路由器。
本文档将介绍 Gin 的核心概念和常用功能,包括路由、参数绑定、JSON 响应、中间件等。
准备工作首先,你需要安装 Gin 框架:
1go get -u github.com/gin-gonic/gin
基础结构一个基本的 Gin 应用通常包含以下部分:
1234567891011121314151617181920212223242526272829303132package mainimport ( "net/http" // 用于 HTTP 状态码 "fmt" // 用于打印输出 "github.com/gin-gonic/gin")func main() { // 1. 创建一个 Gin 路由器实例 // gin.Default() 包含了 Logger 和 Recover ...






