当前位置: 首页 > news >正文

【魅力golang】之-反射

1引言

反射(Reflection)在 Golang中用于运行时检查和操作变量的类型和值。通过反射,可以实现动态类型处理,这在构建泛型代码、框架、序列化工具和动态代理等场景中非常有用。

2什么是反射

反射是指程序在运行时能够动态地检查变量的类型信息(如类型名、字段、方法等)以及修改变量的值。Go 提供了一整套反射机制,通过内置的 reflect 包支持动态操作。

为什么需要反射

  1. 动态性:Go 是一种强类型语言,变量类型在编译时确定。反射允许在运行时操作变量的类型和值,提供动态行为。
  2. 框架设计:许多框架(如 ORM、Web 框架)需要在运行时解析结构体和方法,并进行动态调用。
  3. 通用处理:在处理未知类型的数据时,反射提供了灵活性,如序列化和反序列化、依赖注入等。

反射的核心设计理念

  • 类型(Type)与值(Value)分离:Go 的反射通过 reflect.Type 和 reflect.Value 两个核心类型分别管理类型信息和运行时的值。
  • 接口驱动:反射基于接口工作,必须从接口值开始操作。

3Go 反射的核心概念与用法

反射的核心功能依赖 reflect 包,主要包括以下几个重要概念:

3.1 reflect.Type

reflect.Type 表示变量的类型,用于获取变量的类型信息。

示例:获取类型信息

package mainimport ("fmt""reflect"
)func main() {var x int = 42 // 声明一个变量 x,类型为 intt := reflect.TypeOf(x) // 通过反射 获取变量 x 的类型fmt.Println("Type:", t.Name()) // 输出: intfmt.Println("Kind:", t.Kind()) // 输出: int
}
  • Name:获取类型名。
  • Kind:获取底层种类(支持结构体、切片、指针等)。

3.2 reflect.Value

reflect.Value 表示变量的值,用于动态获取和修改变量的值。

示例:获取和修改值

package mainimport ("fmt""reflect"
)func main() {var x int = 42  // 示例值v := reflect.ValueOf(x) // 通过反射,获取变量的值fmt.Println("Value:", v.Int()) // 输出: 42// 修改值ptr := reflect.ValueOf(&x)        // 获取指针elem := ptr.Elem()                // 解引用elem.SetInt(100)                  // 修改值fmt.Println("Modified Value:", x) // 输出: 100
}

3.3 reflect.Kind

Kind 表示变量的基础种类,如 Struct、Slice、Map、Pointer 等。

示例:区分类型和种类

package mainimport ("fmt""reflect"
)func main() {var x []int // 整型的空切片t := reflect.TypeOf(x) // 通过反射获取切片的类型fmt.Println("Type:", t.Name()) // 输出: 空字符串,因为切片没有名称fmt.Println("Kind:", t.Kind()) // 输出: slice
}

输出:

Type: 
Kind: slice

3.4 获取结构体信息

通过反射可以动态获取结构体字段、方法等信息。

示例:获取结构体字段信息

package mainimport ("fmt""reflect"
)type User struct {ID intName string
}func main() {user := User{ID: 1, Name: "Alice"} // 创建一个User结构体实例t := reflect.TypeOf(user) // 获取user结构体的反射类型对象for i := 0; i < t.NumField(); i++ { // 遍历结构体的字段field := t.Field(i) // 获取当前字段的反射类型对象fmt.Printf("Field Name: %s, Type: %s\n", field.Name, field.Type)}
}

输出:

Field Name: ID, Type: int
Field Name: Name, Type: string

4反射的应用场景

4.1 动态调用方法

反射支持在运行时动态调用方法,适用于插件框架或动态执行的场景。

示例:调用结构体方法

package mainimport ("fmt""reflect"
)type Calculator struct{} // 定义一个结构体func (c Calculator) Add(a, b int) int { // 为这个结构体定义一个方法return a + b
}func main() {calc := Calculator{} // 创建一个Calculator实例v := reflect.ValueOf(calc) // 获取Calculator实例的反射值method := v.MethodByName("Add") // 通过名称获取Calculator实例的方法args := []reflect.Value{reflect.ValueOf(10), reflect.ValueOf(20)} // 创建一个参数列表result := method.Call(args) // 调用方法fmt.Println("Result:", result[0].Int()) // 输出: 30
}

4.2 动态序列化与反序列化

反射常用于实现 JSON、XML 等序列化框架,动态处理不同类型的数据。

示例:JSON 动态序列化

package mainimport ("encoding/json""fmt""reflect"
)func toJSON(data interface{}) string { // 定义一个函数,接收一个interface{}类型的参数,返回一个string类型v := reflect.ValueOf(data) // 获取data的reflect.Value类型if v.Kind() == reflect.Struct { // 判断data是否为结构体类型jsonData, _ := json.Marshal(data) // 将data转换为JSON格式return string(jsonData) // 返回JSON格式的字符串}return ""
}type User struct { // 定义一个用户结构体类型ID intName string
}func main() {user := User{ID: 1, Name: "Alice"} // 创建一个User结构体实例jsonStr := toJSON(user) // 调用toJSON函数,传入user结构体实例fmt.Println("JSON:", jsonStr) // 输出: {"ID":1,"Name":"Alice"}
}

4.3 数据校验

反射可用于动态校验结构体字段。

示例:验证必填字段

package mainimport ("fmt""reflect"
)type User struct { // 定义一个用户结构体Name string `validate:"required"`Age int
}func validateStruct(s interface{}) { // 定义一个验证函数t := reflect.TypeOf(s) // 通过反射获取结构体的类型v := reflect.ValueOf(s) // 通过反射获取结构体的值for i := 0; i < t.NumField(); i++ { // 遍历结构体的每个字段field := t.Field(i) // 获取当前字段的类型tag := field.Tag.Get("validate") // 获取当前字段的标签if tag == "required" && v.Field(i).Interface() == "" { // 如果标签为required且值为空,则输出错误信息fmt.Printf("Field %s is required\n", field.Name) // 输出错误信息}}
}func main() {user := User{} // 创建一个用户结构体实例validateStruct(user) // 输出: Field Name is required
}

5反射的特点

5.1 特点

  1. 强大:支持动态检查和操作类型和值。
  2. 灵活:适用于动态框架、序列化、动态代理等场景。
  3. 复杂性:代码可读性较低,容易引发错误。

5.2 注意事项

  1. 性能开销:反射比直接操作慢,频繁使用可能影响性能。
  2. 类型安全性:反射使用时缺乏类型检查,容易引发运行时错误。
  3. 接口值限制:反射只能操作接口值,必须通过显式转换或传递接口。

示例:反射的运行时错误

package mainimport ("reflect"
)func main() {var x int = 42v := reflect.ValueOf(x) // v是int类型的反射值v.SetInt(100) // 运行时错误: reflect.Value.SetInt using unaddressable value
}

这里会抛出异常:

panic: reflect: reflect.Value.SetInt using unaddressable value

解决方案:使用指针传递。

6总结

反射功能强大且复杂,适合在动态类型处理、框架设计等场景中使用。虽然反射提供了极大的灵活性,但也伴随性能开销和复杂性。因此,在实际开发中,应根据需求谨慎使用反射,优先选择静态代码来实现功能。

相关文章:

【魅力golang】之-反射

1、引言 反射&#xff08;Reflection&#xff09;在 Golang中用于运行时检查和操作变量的类型和值。通过反射&#xff0c;可以实现动态类型处理&#xff0c;这在构建泛型代码、框架、序列化工具和动态代理等场景中非常有用。 2、什么是反射 反射是指程序在运行时能够动态地检…...

Java在 聊天管理系统中的应用

聊天管理系统已经成为人们日常沟通不可或缺的一部分。无论是企业内部的即时通讯&#xff0c;还是社交媒体平台的聊天功能&#xff0c;聊天管理系统都扮演着至关重要的角色。 Java 作为一种广泛应用的编程语言&#xff0c;凭借其强大的功能、良好的跨平台性以及丰富的类库&…...

记一次rac故障原因分析(虚拟化平台)

一 现象描述 XX客户于1月14号凌晨业务中断&#xff0c;检查数据库发现数据库集群宕机。 XX客户于2月14号春节初五早上业务异常&#xff0c;连接数据库无响应。 二 问题详细诊断 1月14号故障 1月14号凌晨2点&#xff0c;客户反馈业务中断&#xff0c;发现节点1无法连接&…...

opencv中的各种滤波器简介

在 OpenCV 中&#xff0c;滤波器是图像处理中的重要工具&#xff0c;用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。 1. 均值滤波 (Mean Filter) 功能&#xff1a; 对图像进行平滑处理&#xff0c;减少噪声。 应用场景&#xff1a; 去除图像…...

文本数据处理

文本数据处理 一、数据转换与错误处理 &#xff08;一&#xff09;运维中的数据转换问题 在计算机审计及各类数据处理场景中&#xff0c;数据转换是关键步骤&#xff0c;涉及将被审计单位或其他来源的数据有效装载到目标数据库&#xff0c;并明确标示各表及字段含义与关系。…...

ThinkPHP 8开发环境安装

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 1. 安装PHP8 Windows系统用户可以前往https://windows.php.net/downloads/releases/archives/下载PHP 8.0版本&am…...

php怎么去除数点后面的0

在PHP中&#xff0c;我们可以使用几种方法来去除数字小数点后的0。 方法一&#xff1a;使用intval函数 intval函数可以将一个数字转化为整数&#xff0c;另外&#xff0c;它也可以去除小数点后面的0。 “php $number 123.4500; $number intval($number); echo $number; // 输…...

Database.NET——一款轻量级多数据库客户端工具

文章目录 Database.NET简介下载使用使用场景总结 Database.NET简介 Database.NET 是一个功能强大且易于使用的数据库管理工具&#xff0c;适用于多种数据库系统。它为开发者和数据库管理员提供了一个统一的界面&#xff0c;可以方便地管理和操作不同类型的数据库。 支持的数据…...

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告&#xff1a;HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…...

protobuf学习使用

1、概述 protobuf是Google开发的一种语言中立、平台无关、可扩展的序列化结构数据格式。允许定义一次数据结构&#xff0c;然后可以使用各种支持的语言来生成代码&#xff0c;以轻松地读写这些结构到一个二进制流中&#xff0c;如网络传输或文件&#xff0c;Protobuf支持多种编…...

跟我学c++中级篇——C++中的缓存利用

一、缓存 学习过计算机知识的一般都知道缓存这个概念&#xff0c;大约也知道缓存是什么。但是如果是程序员&#xff0c;如何更好的利用缓存&#xff0c;可能就有很多人不太清楚了。其实缓存的目的非常简单&#xff0c;就是了更高效的操作数据。大家都听说过“局部性原理”&…...

Goland 安装与使用

GoLand安装 官方网址&#xff1a; JetBrains GoLand&#xff1a;不只是 Go IDE 1. 进入官网&#xff0c;点击下载&#xff1a; ​ 2. 如下图一步步安装 ​ ​ ​ ​ ​ 3. 如下图一步步安装...

cesium通过经纬度获取3dtiles 得feature信息

找到这里3dtiles的两种访问方式&#xff1a; 1.1 3DTileContent#getFeature 这里涉及3DTile 数据结构&#xff0c;暂不了解3DTile 数据结构&#xff0c;因此暂不使用。 1.2 scene.pick 本次使用 scene表示虚拟场景中所有 3D 图形对象和状态的容器&#xff1b;scene中…...

spring cloud gateway 3

**Spring Cloud Gateway 3** 是 Spring Cloud 生态系统中的一个重要组件&#xff0c;用于构建 API 网关&#xff0c;提供路由、监控、安全等关键功能。以下是关于 Spring Cloud Gateway 3 的详细介绍&#xff1a; ## 1. 什么是 Spring Cloud Gateway&#xff1f; **Spring Clou…...

青少年编程与数学 02-005 移动Web编程基础 03课题、流式布局

青少年编程与数学 02-005 移动Web编程基础 03课题、流式布局 一、流式布局二、网页示例HTML (index.html)CSS (styles.css) 三、精灵图精灵图的工作原理精灵图的优点精灵图的缺点精灵图的适用场景 四、轮播图HTML (index.html)CSS (styles.css)JavaScript (script.js) 课题摘要…...

【数据可视化复习方向】

1.数据可视化就是数据中信息的可视化 2.数据可视化主要从数据中寻找三个方面的信息&#xff1a;模式、关系和异常 3.大数据可视化分类&#xff1a;科学可视化、信息可视化、可视分析学 4.大数据可视化作用&#xff1a;记录信息、分析推理、信息传播与协同 5.可视化流程&…...

Spring Security 6 系列之九 - 集成JWT

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级为6.3.0&#xff0c;关键是其风…...

大数据实验三

Python and anaconda 实验三数据预处理和轨迹聚类参考地址&#xff1a; https://www.hifleet.com/wp/communities/data/hangyundashujujishukechengshiyanzhinanshujuyuchulijiguijijuleichixugengxinzhong#post-2212https://www.hifleet.com/wp/communities/data/hangyundas…...

《计算机网络(第7版)-谢希仁》期末考试复习题和答案(总结整理)

目录 前言&#xff1a; 一、选择题。 二、填空题。 三、名词解释。 四、简答题。 前言&#xff1a; 这个自动标题自己带了序号&#xff0c;一开始想全部选项和题号都改过来的&#xff0c;结果一看一百多个全是&#xff0c;懒得改了 一、选择题。 1、广域网覆盖的地理范围…...

学习笔记 --C#基础其他知识点(持续更新)

C#中的同步和异步《一》 以下理解借鉴博客&#xff1a;借鉴博客地址1 异步编程&#xff08;Asynchronous&#xff09; 允许任务在后台执行&#xff0c;而不会阻塞调用线程。C#使用async和await关键字 async Task AsynchronousMethod() {// 等待异步操作完成await Task.Delay…...

STM32 高级 谈一下IPV4/默认网关/子网掩码/DNS服务器/MAC

首先可以通过 winr->输入cmd->输入ipconfig 命令可以查看计算机的各种地址 IPV4&#xff1a;是互联网协议第 4 版&#xff08;Internet Protocol version 4&#xff09;所使用的地址。它是一个 32 位的二进制数字&#xff0c;通常被分为 4 个 8 位的部分&#xff…...

智能家居实训室中,STC单片机驱动的“互联网+”智能家居系统设计

一、引言 随着经济的快速发展&#xff0c;人们对家居环境的智能化、网络化需求日益增强&#xff0c;智能家居的研究也因此受到了国内外相关机构的广泛关注。STC单片机凭借其卓越的性能和广泛的应用领域&#xff0c;成为了智能家居系统设计的优选方案。作为一种先进的微控制器&…...

esp32学习:用虫洞ESP32S3-EYE开发板快速实现USB摄像头(UVC免驱)

直接上干货&#xff1a;实现一个USB摄像头&#xff0c;免驱UVC设备。 硬件准备&#xff1a; 乐官方推荐的Cam开发板就是乐鑫带摄像头OV2604的esp32-s3-eye&#xff0c;我们虫洞esp32-s3-eye完全兼容这个板子哦&#xff0c;虫洞ESP32-S3-EYE 人脸识别 esp-cam升级 OpenCV LVGL …...

Python 面向对象编程 五(结束)组合

Python 面向对象编程 五&#xff08;结束&#xff09;组合 组合 组合 组合是面向对象编程中另一个流行的概念&#xff0c;它与封装也有一定关系。简单地说&#xff0c;组成是指在一个对象中包含一个或多个对象&#xff0c;从而形成一个真实世界的对象。包含其他类对象的类称为…...

基于微信小程序的校园访客登记系统

基于微信小程序的校园访客登记系统 功能列表 用户端功能 注册与登录 &#xff1a;支持用户通过手机号短信验证码注册和登录。个人资料管理 &#xff1a;允许用户编辑和更新个人信息及其密码。站内信消息通知&#xff1a;通知公告。来访预约&#xff1a;提交来访预约支持车牌…...

docker 部署mysql8

在Docker中部署MySQL 8是一个相对简单的过程。以下是基本的步骤&#xff1a; 拉取MySQL 8镜像&#xff1a; 使用Docker命令拉取最新的MySQL 8镜像&#xff1a; docker pull registry.openanolis.cn/openanolis/mysql:8.0.30-8.6创建并运行MySQL容器&#xff1a; 创建并运行MySQ…...

聊一聊 C#前台线程 如何阻塞程序退出

一&#xff1a;背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题&#xff1a;后台线程的内部是如何运转的 ? &#xff0c;犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug&#xff0c;最后发现是有一个 Backgrond…...

【编译原理】往年题汇总(山东大学软件学院用)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;编译原理_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

【原创学习笔记】近期项目中使用的西门子V20变频器总结(上篇)

现场V20 22kW变频器如图所示 进线分别为L1,L2,L3,PE线&#xff0c;出现分别为U,V,W接电机 在西门子官网查询手册后&#xff0c;查询可知可以通过多种方式控制变频器&#xff0c;比如&#xff1a;面板&#xff08;BOP&#xff09;控制&#xff0c;端子&#xff08;NPN/PNP&…...

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…...

Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集PI-FGSM介绍背景和动机算法原理算法流程 PI-FGSM代码实现PI-FGSM算法实现攻击效果 代码汇总pifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexN…...

Casino Royale靶场wp

0x00 下载安装 https://download.vulnhub.com/casinoroyale/CasinoRoyale.ova 导入vmware启动 0x01 主机信息收集 0x02目录扫描 index.php 获取到一个域名 修改本地hosts 添加一行 路径&#xff1a;C:\Windows\System32\drivers\etc 192.168.2.20 casino-royale.local 点击…...

c/c++ 无法跳转定义

背景 对于嵌入式开发离不开交叉编译工作&#xff0c;采用vccode远程到虚拟机开发来说&#xff0c;总会遇到一个函数跳转问题。下面针对运用开发如何设置vscode保证函数能正确跳转大函数定义。 一、安装c/c插件 安装C/C Extension Pack插件&#xff0c;这插件包含有几个插件。…...

4.5 数据表的外连接

本次课程我们将继续的学习数据表的连接。因为数据表的连接是分为内连接和外连接的。内连接的语法&#xff0c;还有一些练习&#xff0c;我们都是学习到了。那么本次课程咱们就开始学习数据表的外连接语法。首先我来解释一下为什么要使用外连接这种语法。咱们首先看一条记录&…...

请购单一直提示需求部门不能为空无法提交

终于发现了它的逻辑。用户很多次反馈&#xff0c;提交请购单时&#xff0c;提示需求部门不能为空&#xff0c;既使选择了需求部门&#xff0c;保存时&#xff0c;神奇的是会清空掉部门的信息&#xff0c;提交时就会有错误提示出来。 原因&#xff1a;光选择单头上的需求部门是…...

Jenkins基础教程

Jenkins介绍 Jenkins 是一款开源的持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;工具&#xff0c;在软件开发和自动化部署流程中发挥着关键作用。 1.背景和起源 它最初是由 Sun Microsystems 公司的一名工程师开发的 Hudson 项目&#xff0c;后来…...

如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH

目录 一、什么是 Java 环境变量&#xff1f; 二、配置 Java 环境变量 1. 下载并安装 JDK 2. 配置 JAVA_HOME Windows 系统 Linux / macOS 系统 3. 配置 PATH Windows 系统 Linux / macOS 系统 4. 验证配置 三、常见问题与解决方案 1. 无法识别 java 或 javac 命令 …...

深入解析 Pytest 钩子函数及二次开发过程

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在 Pytest 测试框架中&#xff0c;钩子函数&#xff08;Hooks&#xff09;是一种强…...

http 请求总结get

关于get请求传递body的问题 错误代码 有400 , 415 等情况 <!doctype html><html lang"zh"><head><title>HTTP Status 400 – 错误的请求</title><style type"text/css">body {font-family:Tahoma,Arial,sans-seri…...

漏洞扫描:网络安全的 “体检” 与 “防护指南”

在当今数字化时代&#xff0c;网络安全如同守护城堡的坚固城墙&#xff0c;而漏洞扫描则是检查城墙是否存在缝隙与薄弱环节的重要手段。那么&#xff0c;究竟什么是漏洞扫描&#xff1f;又该如何进行呢&#xff1f; 什么是漏洞扫描&#xff1f; 漏洞扫描是一种安全检测过程&a…...

《Vue进阶教程》第二十七课:实现侦听对象

往期内容&#xff1a; 《Vue进阶教程》第十六课&#xff1a;深入完善响应式系统之单例模式 《Vue进阶教程》第十七课&#xff1a;支持分支切换 《Vue进阶教程》第十八课&#xff1a;避免死循环 《Vue进阶教程》第十九课&#xff1a;computed初步实现 《Vue进阶教程》第二十…...

【Linux 网络 (五)】Tcp/Udp协议

Linux 网络 一前言二、Udp协议1&#xff09;、Udp协议特点2&#xff09;、Udp协议格式3&#xff09;、Udp报文封装和解包过程4&#xff09;、UDP的缓冲区 三、TCP协议1&#xff09;、TCP协议特点2&#xff09;、TCP协议格式1、4位首部长度、源端口、目的端口2、16位窗口大小3、…...

算法工程化工程师

算法工程化工程师是一种结合算法研究与工程开发能力的技术职位&#xff0c;主要职责是将算法从理论研究到实际落地&#xff0c;应用到各种工业或商业场景中。以下是关于这个职位的一些核心内容&#xff1a; 核心职责&#xff1a; 算法实现与优化&#xff1a; 将数学模型或算法…...

信息系统管理师试题-转型升级

1.3.转型升级 战略转型升级是对组织的长期发展方向、运行模式、组织战略、组织方式、资源配置方式、祖师文化等进行全方位升级变革。下列对战略转型升级的描述错误的是&#xff08;&#xff09; A大多数组织的转型主要是战略转型 B组织转型升级首先要解决的是战略选择问题 C组织…...

mysql三种读取模式(普通、流式、游标)

在与MySQL数据库交互时&#xff0c;数据的读取方式有多种选择&#xff0c;包括流式读取、游标读取和普通读取。每种方式都有其独特的原理、优势和劣势。本文将对这三种读取方式进行详细介绍&#xff0c; 1. 普通读取 介绍 普通读取是指通过JDBC的Statement或PreparedStateme…...

月子会所ERP管理云平台 GetData.ashx SQL注入致RCE漏洞复现

0x01 产品简介 月子会所ERP管理云平台是武汉金同方科技有限公司专为为母婴服务行业提供信息化解决方案,是结合行业顶级月子中心相关企业需求开发的一套综合性管理软件。该系统全面管控月子中心经营过程中的各个环节,提高总店及分店月子中心管理水平,规范月子中心从业人员操作…...

Ubuntu22.10/22.04 autoinstall--OK

第一步:建立ubuntu22.04 jammy apt本地源(见本博主对应栏) --------------------------------------------------------------------------------------- ubuntu22.04 grub配置: menuentry Ubuntu22.04-autoinstall(UEFI) --id UBUNTU22.04-autoinstall { echo "…...

操作系统之同步与互斥的基本概念

1. 同步的基本概念 定义&#xff1a;同步是指在多个并发执行的进程或线程之间协调其行为&#xff0c;以使它们能够正确地相互合作。在计算机科学中&#xff0c;同步通常指对共享资源进行访问控制&#xff0c;以避免竞争条件和死锁等问题。 实现方式&#xff1a;为了实现同步&a…...

【ANGULAR网站开发】初始环境搭建

1. 初始化angular项目 1.1 创建angular项目 需要安装npm和nodejs&#xff0c;这边不在重新安装 直接安装最新版本的angular npm install -g angular/cli安装指定大版本的angular npm install -g angular/cli181.2 启动angular 使用idea启动 控制台启动 ng serve启动成功…...

[青少年CTF练习平台]Lihua‘s for

下载附件之后直接IDA启动 查看dword_403040指向的内容&#xff0c;全是数据&#xff0c;提取出来 分析完成写脚本 flag "" temdata [0x00000066, 0x0000006D, 0x00000063, 0x00000064, 0x0000007F, 0x00000064, 0x00000032, 0x00000036, 0x0000006A, 0x000000…...