Go 语言学习笔记:指针与数据结构 (PHP 视角版)
核心心法:从 PHP 转 Go,最大的思维转变在于从“万能数组 (Array)”转向“严格类型 (Struct/Map)”以及理解“默认值传递”。 第一部分:指针 (Pointer)1. 核心概念Go 语言中的指针,本质上就是数据的内存地址。 & (取址):获取“门牌号”(地址)。 * (解引用):拿着门牌号进屋,获取/修改里面的东西。 2. PHP 经验迁移你的直觉非常准:Go 的指针 (*T) $\approx$ PHP 的引用 (&$v)。 共同目的:都是为了直接修改原始数据,而不是操作数据的副本 (Copy)。 区别: PHP:foreach ($arr as &$v) 是一种语法糖,PHP 帮你处理了地址。 Go:必须显式地传递地址 &v,并在函数内显式操作 *v。 3. 对象传递的差异 (这也是最大的坑) 场景 PHP Go 传递对象 默认引用 (Class 实例默认就是引用) 默认复制 (Struct 默认是值拷贝) 如何修改 直接改 $obj->name 必须传指针 func...
Docker-compose完全指南
引言Docker Compose是Docker生态系统中的一个重要工具,它极大地简化了多容器应用的定义和运行。通过使用简单的YAML配置文件,开发者可以轻松地定义、启动和管理由多个相互关联的容器组成的应用程序。本文将全面介绍Docker Compose的基本概念、配置选项、使用方法以及最佳实践,帮助您更高效地管理容器化应用。 目录 什么是Docker Compose 安装Docker Compose 基本概念 版本与名称 服务 网络 卷 项目 常用命令 实际应用场景 常见问题与解决方案 最佳实践 总结 什么是Docker ComposeDocker Compose是一个用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷,使开发人员能够在一个地方定义和管理多个容器。通过简单的命令,您可以创建和启动配置中定义的所有服务,极大地简化了容器化应用的开发和部署流程。 安装Docker Compose安装Docker Compose在大多数Linux系统上,可以通过以下命令安装Docker Compose: 1sudo apt inst...
GoFrame文件上传完全指南
引言GoFrame 是一个模块化、高性能、企业级的 Golang 应用开发框架,提供了丰富的功能组件。文件上传是 Web 应用中常见的需求,GoFrame 框架提供了简单而强大的文件上传处理能力。本文将详细介绍如何在 GoFrame 中实现文件上传功能,包括基本配置、API 使用、安全处理以及最佳实践。 目录 基础知识 GoFrame 文件上传概述 文件上传相关接口 配置说明 上传目录配置 文件大小限制 文件类型限制 基本使用 单文件上传 多文件上传 自定义文件名 高级用法 文件验证 图片处理 分片上传 完整示例 后端代码 前端代码 安全考虑 常见问题与解决方案 最佳实践 基础知识GoFrame 文件上传概述GoFrame 框架通过 ghttp.Request 对象提供了便捷的文件上传处理能力。上传的文件会被封装为 *ghttp.UploadFile 对象,该对象提供了丰富的方法来操作上传文件,如获取文件信息、保存文件等。 文件上传相关接口GoFrame 中与文件上传相关的主要接口和方法包括: GetUploadFile(name string) *U...
Golang HTTP请求完全指南
引言Golang 提供了强大而灵活的 HTTP 客户端和服务器实现,通过标准库 net/http 包可以轻松处理 HTTP 请求和响应。本文将详细介绍如何在 Go 中发起各种 HTTP 请求、处理响应以及一些高级用法和最佳实践。 目录 基础 HTTP 请求 GET 请求 POST 请求 POST 表单请求 自定义 HTTP 请求 创建自定义请求 设置请求头 设置查询参数 设置请求超时 发送请求 处理 HTTP 响应 读取响应体 处理状态码 处理响应头 解析 JSON 响应 解析 XML 响应 高级用法 HTTP 客户端定制 处理 Cookie 上传文件 下载文件 HTTP/2 支持 并发请求 错误处理与调试 常见错误处理 请求调试技巧 最佳实践 连接池管理 请求重试策略 性能优化 完整示例 基础 HTTP 请求GET 请求最简单的 HTTP 请求是 GET 请求,用于从服务器获取数据: 12345678910111213141516171819202122232425262728package mainimport ( "fmt&...
商品秒杀与高并发系统设计
引言在电商领域,商品秒杀是一种常见的促销活动,它要求系统能够在短时间内处理大量的并发请求。本文将深入探讨高并发的概念、秒杀系统面临的挑战以及相应的解决方案,并提供基于Redis和MySQL的实现示例。 目录 并发与高并发基础 什么是并发 什么是高并发 高并发的特点 秒杀系统架构设计 系统架构图 核心流程 关键技术点 高并发的挑战 高并发的解决方案 前端优化 系统架构优化 数据库优化 缓存策略 限流与熔断 秒杀系统实现示例 基于Redis的实现 基于MySQL的实现 性能测试与优化 常见问题与解决方案 总结与最佳实践 并发与高并发基础什么是并发并发是指在同一时间段内,多个任务同时执行的能力。在计算机系统中,这通常通过时间片轮转或多核处理来实现。 举个生活中的例子来理解并发和并行的区别: 单线程处理:你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这说明你不支持并发也不支持并行。 并发处理:你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 并行处理:你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 什么是...
WebSocket
WebSocket引言WebSocket 是现代 Web 开发中实现实时双向通信的重要技术。本文将从基础概念开始,深入探讨 WebSocket 的工作原理、实现方式和最佳实践,帮助开发者全面掌握这项技术。 目录 什么是 WebSocket 与 HTTP 的区别 WebSocket 协议详解 握手阶段 数据传输阶段 WebSocket 与 Socket 的区别 工作原理 核心特征 应用场景 代码示例 服务端实现 (PHP/Workerman) 客户端实现 (JavaScript) 性能优化 安全性考虑 常见问题与解决方案 浏览器兼容性 最佳实践 什么是 WebSocketWebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许服务器主动向客户端推送数据,而不需要客户端发起请求,从而实现真正的实时通信。 与 HTTP 的区别 特性 HTTP WebSocket 连接类型 短连接,每次请求都需要握手 长连接,只需握手一次 通信方向 单向,只能由客户端发起请求 双向,服务器可主动推送数据 协议标识 http:// /...
GoFrame-demo-用户注册实现
注册请求/响应1234567891011121314151617181920#api/v1/user/user.gopackage userimport ( "gf_study/internal/model/entity" "github.com/gogf/gf/v2/frame/g")type RegisterReq struct { g.Meta `path:"/user/register" method:"post" summary:"注册" tags:"User" ` Username string `v:"required|length:6,16#请输入账号|账号长度为:min到:max位" dc:"用户账号" json:"username"` Password string `v:"required|length:6,16#请输入密码|密码长度为:min到:...
RabbitMq
引言RabbitMQ 是一个开源的消息代理软件(消息队列),实现了高级消息队列协议 (AMQP)。它常用于分布式系统中处理异步通信、任务队列和系统解耦。本文将指导您安装 RabbitMQ,并提供 ThinkPHP 中的简单示例,帮助您快速上手。 目录 引言 基础概念 工作模式 高级主题 安装 安装 Erlang 安装 RabbitMQ Windows 安装 Linux 安装(Ubuntu 示例) macOS 安装(使用 Homebrew) 启用插件 启动 RabbitMQ 打开管理界面 ThinkPHP 示例 安装 Composer 包 生产者 消费者 查看指令 启动消费者监听 测试 生产消息 查看消费者消息 常见问题排查 最佳实践 参考资源 SEO 优化建议 基础概念RabbitMQ 是基于 AMQP(高级消息队列协议)的消息代理。核心组件包括: 生产者 (Producer): 发送消息的应用程序。 消费者 (Consumer): 接收并处理消息的应用程序。 队列 (Queue): 存储消息的缓冲区。消息在队列中等待被消费。 交换机 (Exchange): ...
crud demo
脚手架安装1go install github.com/gogf/gf/cmd/gf/v2@latest 查看是否安装成功1234567891011121314$ gf -vv2.9.0Welcome to GoFrame!Env Detail: Go Version: go1.24.3 windows/amd64 GF Version(go.mod): cannot find go.modCLI Detail: Installed At: C:\Users\JT\go\bin\gf.exe Built Go Version: go1.24.3 Built GF Version: v2.9.0Others Detail: Docs: https://goframe.org Now : 2025-08-27T15:18:41+08:00 模板123gf init demo -u# demo 项目名称# -u 使用最新版 目录结构1234567891011121314151617demo├── api├── hack├── internal│ ├── cmd│ ...
go frame
GoFrame 安装安装 golang版本 >= 1.20 12345#初始化go.modgo mod init# 安装gfgo get -u -v github.com/gogf/gf/v2 导入123import ( "github.com/gogf/gf/v2/frame/g") 快速开始123456789101112package mainimport ( "fmt" "github.com/gogf/gf/v2")func main() { fmt.Println("Hello GoFrame:", gf.VERSION)} 运行1go run main.go 输出1Hello GoFrame: 2.9.0 获取请求参数123456789101112package mainimport ( "fmt" "github.com/gogf/gf/v2")func main() { ...