自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 GORM中钩子了解

GORM钩子函数是在模型生命周期特定阶段自动执行的机制,支持创建、更新、删除和查询操作的预处理和后处理。通过定义特定签名的方法(如BeforeCreate、AfterUpdate等),开发者可在数据库操作前后实现数据校验、日志记录等逻辑。钩子函数接收*gorm.DB参数,返回error可控制操作流程(成功继续/错误回滚)。常见应用包括自动生成UUID、数据校验、关联操作和查询后处理。注意所有操作默认在事务中执行,需使用钩子提供的tx对象保证事务一致性。

2026-04-11 15:41:15 247

原创 路由中间件快速了解(Gin版)

文章摘要: 路由中间件是处理HTTP请求与业务逻辑之间的通用功能模块,可有效解决重复代码、统一管控和灵活扩展等问题。本文介绍了中间件的核心概念、必要性及五种常用实现方式:1)日志记录请求信息;2)跨域处理;3)Token鉴权;4)参数校验;5)限流防护。基于Go Gin框架的代码示例展示了中间件的具体应用,包括全局注册、路由组和单路由三种使用场景。通过中间件可实现非侵入式的功能扩展,提升代码复用性和系统安全性。

2026-04-04 15:08:54 496

原创 http和https的了解

HTTP(超文本传输协议)是Web通信的基础协议,具有无状态、无连接、明文传输等特点。HTTP缓存机制通过强缓存和协商缓存优化性能:强缓存直接使用本地资源(通过Cache-Control或Expires控制),协商缓存则通过ETag或Last-Modified与服务器验证资源有效性。合理配置缓存策略(如静态资源长期缓存+文件指纹)可显著提升性能,同时需注意资源更新问题。

2026-03-21 15:52:20 1489 3

原创 git学习

本文介绍了Git分布式版本控制工具的基本概念和使用方法。主要内容包括:1) Git与SVN等集中式版本控制的区别,Git采用分布式架构;2) Git工作流程及常用命令如clone、add、commit、push等;3) Git环境配置与安装;4) 本地仓库创建和基本操作指令;5) 分支管理,包括创建、切换、合并分支及解决冲突;6) 开发中的分支使用原则与流程,如master、develop、feature等分支的作用。文章通过命令示例和流程图详细说明了Git的核心功能,适合初学者快速掌握Git的基本使用。

2026-03-01 21:49:58 609

原创 Go 语言测试综合指南

摘要:本文介绍了Go语言测试工具go test的核心功能和应用场景。主要内容包括:1) 测试函数(Test Functions)用于验证代码逻辑正确性,支持表格驱动测试;2) 测试覆盖率工具帮助识别未被覆盖的代码块;3) 基准测试(Benchmarks)用于量化性能指标。文章强调了测试的价值在于解决人工测试漏场景、迭代改代码崩旧功能、静态校验盲区等实际问题,同时提供了具体的测试用例编写方法和最佳实践建议。测试覆盖率不应盲目追求100%,而应关注关键逻辑验证,基准测试则需关注内存分配和执行效率等核心指标。

2026-02-12 15:41:27 652

原创 Web学习之Restful风格

摘要:本文介绍了RESTful风格请求的实现方式,通过Golang的ServeMux多路复用器解决URL处理冗余问题。文章解析了ServeMux结构体原理及DefaultServeMux默认处理器,并演示了如何使用gorilla/mux第三方库实现RESTful路由,包括路径参数处理和路由注册方法。示例代码展示了基于mux.Router构建Web服务的基本流程。

2026-02-07 17:50:32 276

原创 Web学习之用户认证

本文对比分析了Cookie和Session的存储内容及位置: Cookie:仅存储Session ID(如s:abc123def456),包含域名、路径、过期时间等元数据,存储在客户端浏览器(内存或硬盘),大小限制4KB Session:存储完整的用户会话数据(如用户ID、权限、购物车、CSRF令牌等),保存在服务端Redis/数据库,通过Cookie中的ID关联 实现流程: 登录时服务端创建Session并返回包含ID的Cookie 后续请求自动携带Cookie,服务端验证Session 登出时销毁Ses

2026-01-31 14:54:53 664

原创 Web学习之网络通信

本文介绍了网络通信的基础知识,重点阐述了TCP/IP协议体系结构。首先概述了网络通信必须遵守的协议标准,说明OSI七层模型与TCP/IP四层模型的对应关系。其次详细讲解了IP协议的两个版本IPv4和IPv6的特点及区别。最后深入分析了TCP和UDP两种传输层协议:TCP通过三次握手建立连接、四次握手断开连接,提供可靠传输;UDP则是无连接、不可靠但速度更快的协议。全文系统性地介绍了网络通信的核心协议和关键技术要点。

2026-01-24 11:40:22 796

原创 计网学习之物理层和数据链路层

本文概述了计算机网络基础概念及物理层、数据链路层的核心内容。计算机网络定义为由互连设备构成的系统,按覆盖范围分为PAN/LAN/MAN/WAN。性能指标包括速率、带宽、时延等。体系结构采用分层模型(如OSI七层),各层通过协议和服务实现通信。物理层处理比特流传输,涉及编码调制(如曼彻斯特编码)、信道复用技术(FDM/TDM/WDM/CDM)及信道容量限制。数据链路层解决封装成帧、透明传输和差错检测(CRC校验)三大问题,支持点对点和广播信道。文章为理解网络通信原理提供了基础框架。

2025-12-29 10:19:47 625

原创 Redis学习之单线程

Redis采用单线程架构却能实现高性能(单机QPS达100万+),主要基于以下设计: 全内存操作规避磁盘IO瓶颈,CPU资源集中于内存处理; 单线程避免线程切换和锁竞争开销; IO多路复用技术支持高并发网络连接处理; 定制化高效数据结构(如跳表、SDS)优化内存操作; 非核心操作(持久化、大key删除)采用异步/多进程执行。 这种设计最大化利用了单线程优势,同时规避其潜在瓶颈,实现了远超Memcached的性能表现。

2025-12-20 14:55:29 653

原创 Redis学习之go-redis

本文介绍了Go语言中使用Redis的常见操作指南,主要包括: 连接管理:单机和集群连接方式,连接池配置参数 数据类型操作: String:基本读写、批量操作、自增 Hash:字段操作、批量处理 List:推入/弹出元素、范围查询 Set:成员操作、集合运算 Sorted Set:分数相关操作、排名查询 Stream:消息队列操作、消费者组管理 高级功能:事务处理、发布订阅、管道技术 实用技巧:错误处理、大数据集扫描 提供了各操作的代码示例,涵盖Redis主要功能的使用方法。

2025-12-15 14:48:33 486

原创 Redis学习之Stream

Redis Stream 是一种高性能、持久化的消息队列数据结构,具有仅追加日志特性。它通过消费者组机制实现负载均衡和可靠性,每个消息由唯一ID标识并被分配给组内消费者处理。关键机制包括待处理消息列表(PEL)用于跟踪未确认消息,以及XACK确认和XCLAIM故障恢复功能。核心命令如XADD添加消息、XREADGROUP消费消息、XPENDING监控未处理消息等。文章以快递分拣中心为比喻,形象解释了消费者组如何协同工作并确保消息不丢失,适用于构建聊天服务器等实时系统。

2025-12-06 21:35:23 810

原创 MySQL学习之go-mysql

本文介绍了使用Go语言操作MySQL数据库的基本方法。主要内容包括:1)安装驱动和导入包;2)建立数据库连接;3)实现CRUD操作(创建表、增删改查);4)使用预处理语句提高性能;5)事务处理保证数据一致性;6)连接池配置优化。文章提供了详细的代码示例,涵盖了数据库操作的常见场景,并总结了9个关键注意事项,如使用Ping验证连接、正确处理查询结果关闭、合理配置连接池参数等,为Go开发者提供了完整的MySQL操作指南。

2025-11-29 14:43:09 349

原创 redis学习之基础数据结构

Redis提供5种核心数据类型:1)String-二进制安全字符串,用于缓存、计数器和键值存储;2)List-有序字符串列表,适用于消息队列和操作记录;3)Hash-键值对集合,适合存储对象和购物车;4)Set-无序唯一集合,支持交并集运算,用于标签系统和去重;5)Sorted Set-带分数的有序集合,用于排行榜和优先级队列。每种类型都有特定命令和应用场景,能高效处理不同数据结构需求。

2025-11-22 13:59:17 276

原创 数据库的范式讲解

数据库范式是设计关系型数据库的规范体系,核心目标是减少数据冗余和更新异常。基本范式包括1NF(保证数据原子性)、2NF(消除部分依赖)和3NF(消除传递依赖),工业场景中最常用。更高阶的BCNF、4NF和5NF主要解决主属性依赖、多值依赖和连接依赖问题,但实际应用较少。范式等级越高,数据冗余越少但查询性能可能下降,实践中通常在3NF基础上进行适当反范式化,以在数据一致性和查询效率间取得平衡。

2025-11-15 13:41:04 388

原创 sql学习之事务和视图

摘要 本文主要介绍了数据库事务和视图的相关概念。事务是具有ACID特性(原子性、一致性、隔离性、持久性)的一组SQL语句执行单元,可通过显式或隐式方式创建。文章详细说明了事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)及其解决的并发问题(脏读、不可重复读、幻读)。视图部分阐述了其作为虚拟表的特性,可以简化复杂查询、保护数据安全,并介绍了视图的创建、修改、删除、查看和更新操作。通过转账等案例说明了事务的实际应用,同时指出某

2025-11-08 13:15:01 1023

原创 SQL学习之常见函数和连接查询

摘要 本文系统介绍了SQL中常见的函数及其分类。单行函数包括字符函数(length、concat等)、数学函数(round、ceil等)、日期函数(now、year等)以及其他实用函数。分组函数则用于统计分析,如sum、avg等。文章详细讲解了各种函数的语法和使用场景,包括字符串处理、数值计算、日期操作等。特别强调了分组查询的语法规则和特点,包括where和having的区别,以及group by的多字段分组能力。通过多个实际案例演示了如何编写复杂的分组查询语句,帮助读者掌握SQL函数的综合应用技巧。

2025-11-01 13:33:14 921

原创 SQL学习之常用的数据库命令和基础查询

MySQL基础操作与查询摘要 本文介绍了MySQL数据库的基本操作命令、语法规范和查询语句。主要内容包括: 基础命令:数据库查看、表操作、版本查询等常用命令 语法规范:大小写规则、注释方式、标点符号使用等注意事项 数据导入导出:使用source指令导入和mysqldump导出数据 SELECT查询:基本查询结构、字段选择、别名设置、去重操作 条件查询:比较运算符、逻辑运算符和模糊查询(LIKE、BETWEEN、IN等) 排序查询:ORDER BY子句的使用及升序降序设置 特别强调了NULL值处理、大小写敏感

2025-10-26 16:21:16 1029

原创 MySQL学习之基础了解

SQL基础概念与数据库设计摘要 SQL(结构化查询语言)是用于与关系型数据库通信的标准语言,具有简单易学、跨平台兼容的特点。数据库管理系统(DBMS)通过表结构存储数据,表由行(记录)和列(字段)组成,类似面向对象中的类与对象关系。关系型数据库基于E-R模型,支持表间四种关联:一对一(可合并为单表)、一对多(从表添加外键)、多对多(通过中间表拆分)以及自我引用。非关系型数据库则采用键值对、文档等灵活存储方式,各有特定适用场景。数据库操作包括启动/停止服务以及通过命令行登录退出等基础管理功能。

2025-10-18 14:55:37 552

原创 linux学习——总结

Linux常用命令指南摘要:本文详细介绍了Linux系统中各类基础与进阶命令,包括目录操作(ls/cd/pwd/mkdir)、文件操作(touch/cat/cp/mv/rm)、查找过滤(find/grep)、文本编辑(vim)、用户权限(su/sudo/chmod)、系统管理(ps/kill/top)、网络工具(ping/wget)以及软件管理(yum/systemctl)等。重点讲解了命令的功能、常见参数和使用场景,如ls -al显示详细目录、rm -rf强制删除、grep过滤内容等,并补充了文件打包压缩

2025-10-12 15:39:16 700

原创 Docker学习——镜像

摘要:Docker镜像是包含软件运行环境和代码的轻量级可执行包,可通过远程下载、复制或Dockerfile制作。其核心是UnionFS分层文件系统,由bootfs(引导内核)和rootfs(发行版基础文件)组成。镜像分层结构允许多容器共享基础层,提升效率。镜像本身只读,容器启动时在其顶部添加可写层。用户可通过docker commit将修改后的容器保存为新镜像,例如自定义Tomcat镜像。这种分层设计实现了资源复用与快速部署。

2025-10-04 12:12:51 867

原创 Linux学习之软件安装,配置主机固定IP,和网络传输

本文介绍了Linux系统中常用的软件管理和网络配置操作。主要内容包括:1)通过yum/apt命令在命令行中安装、卸载和搜索软件;2)使用systemctl管理服务(启动/停止/自启动);3)ln命令创建软链接;4)date命令查看和修改时间,ntp服务自动校准时间;5)IP地址、主机名配置及域名解析原理;6)网络诊断工具ping、wget、curl的使用;7)端口概念及nmap端口扫描。文章还详细说明了如何为虚拟机配置固定IP地址,解决DHCP动态IP导致的问题。这些操作涵盖了Linux系统日常管理和网络配

2025-09-27 11:14:09 659

原创 Linux学习之用户管理

Linux系统采用多用户权限管理模式,root用户拥有最高权限,普通用户权限受限。通过su命令切换用户,建议使用sudo临时获取root权限。用户和用户组管理包括创建/删除用户组(groupadd/groupdel)、创建/删除用户(useradd/userdel)等操作。权限管理通过chmod和chown命令实现,chmod修改文件/文件夹权限(rwx对应数字421组合),chown修改所属用户/组。普通用户需root授权才能使用sudo,root用户可直接切换或修改系统配置。权限管控分为用户和用户组两级

2025-09-21 16:47:15 1074

原创 Linux学习之命令_续

参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在。tail命令可以用于查看文件尾部内容,跟踪文件的最新更改。选项,-num,表示,查看尾部多少行,不填默认10行。语法:wc [-c -m -l -w] 文件路径。参数1,Linux路径,表示被复制的文件或文件夹。参数1,Linux路径,表示被移动的文件或文件夹。选项 -r,可选,用于复制文件夹使用,表示递归。参数2,Linux路径,表示要复制去的地方。参数,Linux路径,表示被跟踪的文件路径。

2025-09-13 16:00:00 688

原创 Linux学习之vi/vim编辑器

本文介绍了Linux中的经典文本编辑器vi/vim。vim是vi的增强版本,支持语法高亮等功能。vi/vim有三种工作模式:命令模式(执行命令)、输入模式(编辑文本)和底线命令模式(保存退出等操作)。文章详细说明了各模式之间的切换方式,并提供了常用快捷键列表,包括光标移动、复制粘贴、删除搜索等操作命令。最后介绍了底线命令模式下的常用指令,如保存(:wq)、退出(:q)、显示行号(:set nu)等。这些内容为初学者提供了vi/vim编辑器的基本使用指南。

2025-09-13 11:12:14 396

原创 Linux学习之虚拟机的基础了解

摘要:本文介绍了操作系统的两种使用形式(图形化与命令行)及目录结构差异(Linux单根目录 vs Windows多盘符)。重点讲解了虚拟机快照功能,包括创建步骤(通过VMware菜单拍摄)、管理方法(恢复/克隆快照)及其在系统测试中的重要作用,可快速回退到保存状态。配图展示了快照管理界面。(98字)

2025-09-06 14:30:00 410

原创 Liunx学习之文件管理

本文介绍了Linux命令行基础知识和常用操作命令。主要内容包括:1)命令行概念,即通过字符指令操作系统的终端界面;2)命令格式规范,通常为"命令 [选项] [参数]"结构;3)常用命令详解,如ls(列出目录内容)、pwd(显示当前路径)、cd(切换目录)、mkdir(创建目录)、rmdir(删除空目录)、touch(创建文件)、cat/more(查看文件内容)等,并说明各命令的选项参数和特殊路径符用法。这些基础命令是Linux系统管理和文件操作的核心工具。

2025-09-06 10:19:11 755

原创 Go进阶学习之协程和管理

本文介绍了Go语言中goroutine和channel的基本概念与应用。首先阐述了进程、线程、并发与并行的区别,指出Go协程是轻量级线程,具有独立空间、共享堆空间等特点。然后通过示例代码展示如何使用goroutine实现并发,并对比了主线程与协程的资源消耗差异。接着讲解了MPG模式(主线程、上下文、协程)和设置CPU核数的方法。最后重点介绍了channel管道的使用,包括定义、初始化、读写操作及注意事项,强调channel是线程安全的队列结构,必须初始化后才能使用,且具有类型限制。文章还提供了全局变量加锁和

2025-08-17 20:25:13 851

原创 Go进阶学习之文件处理

Go语言文件操作指南 摘要:本文介绍了Go语言中处理文件的标准库方法,主要包括os、io、bufio等核心包的使用。内容涵盖文件基本操作(打开/关闭)、读取方式(带缓冲/一次性读取)、写入模式(覆盖/追加)以及文件拷贝等实用功能。重点讲解了os.OpenFile()的多模式组合使用、bufio的缓冲读写优化,以及通过os.Stat()判断文件存在性的技巧。文章提供了多个代码示例,如通过缓冲逐行读取、一次性读取小文件、文件覆盖与追加写入等场景的实现方案,并特别提醒注意文件句柄关闭和缓冲区flush的重要性。

2025-08-17 20:17:12 660

原创 Go基础学习之基本数据类型

本文介绍了Go语言中变量和基本数据类型的使用。变量是程序的基本组成单位,通过var声明并赋值,支持四种定义方式,包括类型推断和简写语法。基本数据类型包括数值型(整型、浮点型)、字符型(byte)、布尔型(bool)和字符串型(string),每种类型都有默认值。文中还详细说明了数据类型转换的方法,包括基本类型转string(使用fmt.Sprintf或strconv包函数)和string转其他类型(通过strconv.Parse系列函数)。特别强调了类型转换时可能出现的精度损失和数据溢出问题。

2025-07-19 20:57:15 375

原创 12.6日学习总结

数组容器再存储数据的时候,需要结合隐式转换, 例如int []arr里可以存储byte, short, int。3.数组的遍历:(1).定义:将数组中所有的内容取出来,取出来之后可以(打印,求和..)范例:int[] arr= new int[]{11,22,33,44};(2).格式:数据类型[] 数组名 = new 数据类型[]{数据值};(1).定义:初始化就是在内存中,为数组容器开辟空间,并将数据存入容器中。(2).格式:数据类型[]数组名 = new 数据类型[数组长度];

2023-12-06 21:00:00 95 1

原创 12.3日学习总结1

(1).默认方法不是抽象方法,所以不强制重写,但如果是被重写,重写的时候去掉default关键字。(3).如果实现了多个接口,多个接口中存在相同名字的默认方阿飞,子类就必须对该方法进行重写。当一个方法的参数是接口时,可以穿递接口所有实现类的对象,这种方法称之为接口多态。实现关系,可以单实现,也可以多实现,还可以再看i成一个类的同时实现多个接口。细节:如果实现类实现了最下面的子接口,那么需要重写所有的抽象方法。(4).接口的子类(实现类):要么重写接口中所有抽象方法。

2023-12-03 12:00:00 85 1

原创 11.29日学习总结

(2).final修饰的变量时引用数据类型:那么变量存储的地址值不能发生改变,对象内部的可以改变。1.包的定义:包就是文件夹. 用来管理各种不同功能的Java类,方便后期代码维修.(1).final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。2.包名的规则:公司域名反写+包的作用,需要全部英文大小写,见名知意.(2).使用Java.lang包中的类时,不需要导包;(4).如果同时使用两个包中的同名类,需要全类名。(1).使用同一个包中的类时, 不需要导包;(3).其他情况都需要导包;

2023-11-29 21:30:00 100 1

原创 11.26日的学习总结

3.多态情况下,子父类存在同名的静态成员变量成员方法时,访问的是父类的成员函数。2.多态情况下,子父类存在同名的非静态成员方法时,访问的是子类中重写的方法。1.多态情况下,子类和父类存在同名的成员变量时,访问的时父类的成员变量。2.同一方法可以根据发送对象的不同而采用不同的行为方式。1.多态是同一个行为具有不同的表现形式或形态的能力。1.父类类型 变量名 = new 子类类型();4.多态情况下,不能访问子类独由的方法。调用在子类中重写的方法。

2023-11-24 16:44:38 96 1

原创 11.22日的学习总结

注意:当出现崇明的成员变量时用this.关键字和super.关键字,其中super关键字是直接调用父类中的。在继承体系中,子类出香炉和父类中一模一样的方法生命,我们就成子类这个方法是重写的方法。(1).@Override是放在重写后的方法上,校验子类重写的语法是否正确。2.子类构造方法的第一行,有一个默认的super(),不写也存在;1.构造方法 : 非私有的不能继承,私有的也不能继承;(1).重写方法的名称,形参列表必须与父类中的一致;(5).子类不能重写父类的静态方法,如果重写会报错的。

2023-11-22 15:47:53 109 1

原创 11.19日的学习总结

2.继承的好处: 可以把多个子类中重复的代码抽取到父类中, 子类可以直接使用,减少代码冗余, 提高代码的复用性.1. 继承:即是面向对想的三大特征之一, 可以让类与类之间产生子父的关系.其中的Ragdoll被称为子类(派生类), cat称为父类(基类或超类)多层继承: 子类A继承父类B,父类B可以继承父类C。(2).子类可以在父类的基础上新增其他功能, 子类更强大.(3).java只支持单继承,不支持多继承,但支持多层继承。(1). 子类可以得到父类的属性和行为, 子类可以使用.

2023-11-19 11:45:00 90

原创 11.15日学习总结

5.Java中四种权限修饰符是public(公共类), private(私有类), protect(受保护类), default(默认类)方法重载是指在同一个类中,方法允许存在一个以上的同名方法,只要他们的方法的参数列表不同即可。方法重载设计的的原则]是在同类中同方法的参数列表不同,方法重载与返回值类型与参数名称无关。static修饰的成员在类的加载到内存中是就已经存在了。1.方法重载与重写的相同之处是方法名。4.所有类都是object类的子类。5.方法重载即设计的原则。11.11日考试总结。

2023-11-15 15:04:24 86

原创 11.12日学习总结

JavaBean类 用来描述一类事物的类. 比如,Student,Teacher,Dog,Cat等。测试类 用来检查其他类是否书写正确, 带有main方法的类, 是程序的入口。1.static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。随着类的加载而加载,优先于对象存在。工具类 不是用来描述这一类事物的,而是帮我们做一些事情的类。调用方法: 类名调用;2. 被static修饰的成员变量,叫做静态变量。3.被static修饰的成员方法,叫做静态方法。

2023-11-13 08:41:18 76

原创 11.8Java学习总结

1.字符串的定义:字符串常量是用双引号括起的一串若干个字符(可以是0个)。Boolean equals ,用'=='是比较字符串的地址值,不比较字符串的内容。字符串的长度: 字符串对象.length() 如;3.字符串的比较:字符的比较不能用'==',要用boolean equalslgnoreCase 忽略大小写(验证码)例如:String name = "lizonghao";注意:字符串的内容是不会发生改变的,他的对象在常见后不能被更改.2.字符串的作用:我们上网时用的用户名和密码是字符串。

2023-11-08 15:48:04 349 1

原创 灯塔:字符串

boolean equalslgnoreCase 忽略大小写(验证码)2.引用数据类型:是数据的地址值;//1.使用直接赋值的方法获取一个字符串对象。//使用new的方法来获取一个字符串对象。/*(==)比较的是:1.基本数据类型:是具体的数据值;

2023-11-07 21:12:31 111 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除