前言 有需要编写前后端配合的软件,轻量且跨平台,快速就能开发一个属于自己的小工具。 思路 Go语言负责后端,获取磁盘信息,连接数据库等前端无法胜任的活路 Vue负责页面编写,调用后端接口,vue3一键...
推荐一个强大的Go语言工具函数库
从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数。当然写 Go 的 PHPer 也想拥...
go 高并发 TCP 网络编程
什么是非阻塞 I/O 下图是四层网络分层,其中数据链路层和网络层都是不可靠的,到了传输层就是可靠的了,机器和机器才能进行可靠的传输,RESP 协议是属于应用层的 TCP 通信过程也就是通过三次握手建立...
PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践
我之前待过一个做 ToB 业务的公司,主要是研发以会员为中心的 SaaS 平台,其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」,这个租户可以拥有一个...
全面掌握 Go 语言 errors 标准库:使用指南与源码深度解析
前言 在 Go 语言中,错误处理是一个重要的部分。Go 官方提供了一个轻量级的 errors 标准库,用于创建和处理错误。本文将介绍如何使用 Go 的 errors 标准库,并深入解析其源码实现。 准...
深入理解go map
什么是 map 维基百科里这样定义 map: In computer science, an associative array, map, symbol table, or dictionary i...
Node、Python、Go中的websocket
在之前的文章中,我们已经多次探讨了WebSocket的各种实现和应用,尤其是使用Node.js生态系统来演示。然而,为了让大家更全面地了解不同编程语言在实现WebSocket服务器时的特点和优势,今天...
用 go 实现 redis resp 协议解析器
redis 网络协议 Redis Serialization Protocol 是 Redis 的网络协议,简称 RESP 它是一种文本协议,基于 TCP 协议,用于 Redis 服务器和客户端之间的...
Golang 依赖注入设计哲学|12.6K ? 的依赖注入库 wire
一、前言 线上项目往往依赖非常多的具备特定能力的资源,如:DB、MQ、各种中间件,以及随着项目业务的复杂化,单一项目内,业务模块也逐渐增多,如何高效、整洁管理各种资源十分重要。 本文从“术”层面,讲述...
Go 高并发下的锁
锁的基础 go 的锁是建立在两个基础之上:atomic 和信号锁 sema atomic atomic 是原子操作,比如对一个 int32 类型的变量加 1,就可以使用 atomic.AddInt32...
使用vscode的SSH插件连接Docker容器进行开发
作为一个curd boy是没想到能用上的, 最近新项目需要编译CGO, 但是我的电脑是M1, 所以申请了一台电脑, 用来编译x64的程序, 编辑器依然是宇宙第一的vscode. 首先讲一...
go 手写框架-1 路由组织
前言 这可以算是一个非主流的框架,但其实它更接近于一个实践项目,而非高度封装的框架。它不像通常框架那样拥有繁多的接口和复杂的封装,而是将所有功能直接体现在代码中,使得开发者能够一目了然地理解其意义,并...
Golang 协程 VS Java线程
在现代编程语言中,协程(goroutine)和线程(thread)是两种常见的并发处理机制。它们分别在 Golang 和 Java 中扮演着重要角色。本文将深入探讨 Golang 的协程和 Java ...
万字解析 Go 官方结构化日志包 slog
slog 日志包是 Go 语言中的一个结构化日志库,旨在提供一个简单而强大的日志系统。因为标准日志库 log 过于简陋,社区中经常有人吐槽,Go 官方也承认了这一点,于是 Go 团队成员 Jonath...
Go 在结构体中定义下划线(_)字段原来还有这个特殊用途?
前言 在 Go 语言中,我们经常会看到下划线(_)的使用,例如将 _ 作为占位符,用于忽略不需要的变量,或者导入但不使用的包(即 Import for side-effects),以及忽略类型转换中的...
【Golang教程】Go-Job让你的任务调度不再繁琐
一、背景 在选择任务调度平台时,团队遇到了一些实际的问题。现有的开源项目如XXL-Job、Elastic-Job,虽然功能强大,但主要是围绕Java设计,而我们团队主要使用Go语言进行开发。这使得我们...
【Golang教程】服务治理的艺术:熔断、降级与选课系统的全面优化
在上文中我们将单体应用迁移到微服务架构的过程中,通过采用Consul作为服务注册与发现中心以及Jaeger实施链路追踪后,结合Docker Compose进行服务编排与启动,已经为微服务架构打下了坚实...
【Golang教程】讲完Go并发控制,讲讲并发抑制
已知有一个函数search,能够按照关键词执行搜索,coSearch能够批量并发查询。 让我们把目光定位到search上,search通过查询数据库或者调用其他api来完成搜索,这是一个相对耗时和消耗...
【Golang教程】Go语言配置管理库—Viper
项目中使用到了Viper配置环境,本文主要想对Viper的用法进行整理,对Viper仓库的README文件进行了翻译用于记录学习。 一、什么是Viper Viper是一个用于go语言项目配置的库,它可...
【Golang教程】Project Root Is All You Need
前言 你是否也遇到过这样的问题:你的项目中有一个配置文件夹,底下有若干个配置文件。你需要在代码中根据环境读取其中的某一个,然后继续后面的流程。 markdown 复制代码 - myAmazingPro...