[Go 微服务] go-micro + consul 的使用
文章目录
- 1.go-micro 介绍
- 2.go-micro 的主要功能
- 3.go-micro 安装
- 4.go-micro 的使用
- 4.1 创建服务端
- 4.2 配置服务端 consul
- 4.3 生成客户端
- 5.goodsinfo 服务
- 5.1 服务端开发
- 5.2 客户端开发
1.go-micro 介绍
Go Micro是一个简化分布式开发 的微服务生态系统,该系统为开发分布式应用程序提供了 高效, 便捷的模块构建, 主要目的是 简化分布式系统的开发,它默认实现了 consul作为服务发现(2019年源码修改了默认使用 mdns),通过 http进行通信,通过 protobuf和 json进行编解码,可以方便开发者们非常简单的开发出微服务架构的项目,并且随着业务模块的增加和功能的增加,Go Micro还能够提供管理微服务环境的工具和功能。
2.go-micro 的主要功能
- 身份验证
- 动态配置
- 数据存储
- 服务发现: 自动服务注册和 名称解析,服务发现是 微服务开发的核心,当服务 A 需要与服务 B 通话时,它需要该服务的位置,默认发现机制是 多播 DNS (mdns),一个 zeroconf 系统。
- 负载均衡
- 消息编码: 基于 内容类型的 动态消息编码,客户端和服务器将使用 编解码器和 内容类型无缝编码和解码 Go 类型,任何种类的消息都可以被编码并从不同的客户端发送,默认情况下,客户端和服务器会处理此问题,这默认包括 protobuf 和 json。
- RPC 客户端/服务器
- Async Messaging: PubSub 作为 异步通信和 事件驱动架构的一等公民内置, 事件通知是 微服务开发的核心模式,默认消息系统是 HTTP 事件消息代理。
- 事件流: 从偏移量和确认中消耗,Go Micro 包括对 NATS Jetstream 和 Redis 流的支持。
- 同步分布式系统通常以 最终一致的方式构建,对 分布式锁定和 领导(Leader)的支持作为同步接口内置,当使用 最终一致的数据库或 调度时,请使用 Sync 接口。
- Pluggable Interfaces: Go Micro 为每个分布式系统抽象使用 Go 接口,因此,这些接口是 可插拔的,并 允许 Go Micro 与运行时无关,可以插入任何底层技术。
3.go-micro 安装
go install github.com/go-micro/cli/cmd/go-micro@latest
4.go-micro 的使用
4.1 创建服务端
go-micro new service helloworld
#init里面的命令:引入需要的包
go get -u google.golang.org/protobuf/proto
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
#proto:执行生成对应的protobuf相关文件
protoc --proto_path=. --micro_out=. --go_out=:. proto/helloworld.proto
会生成相关 .pd.go 文件
go mod tidy
go get go-micro.dev/v4
4.2 配置服务端 consul
go get github.com/go-micro/plugins/v4/registry/consul
# 实例化consul
consulReg := consul.NewRegistry()# 注册consul
srv := micro.NewService(micro.Address("192.168.1.132:8080"), // 选择注册服务器地址,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),micro.Registry(consulReg),
)
main.go
package mainimport ("helloworld/handler"pb "helloworld/proto""go-micro.dev/v4""go-micro.dev/v4/logger""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "helloworld"version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry()// Create servicesrv := micro.NewService(micro.Address("127.0.0.1:8080"), //指定微服务的ip: 选择注册服务器地址,也可以不配置,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),//注册consulmicro.Registry(consulReg),)srv.Init(micro.Name(service),micro.Version(version),)// Register handlerif err := pb.RegisterHelloworldHandler(srv.Server(), new(handler.Helloworld)); err != nil {logger.Fatal(err)}// Run serviceif err := srv.Run(); err != nil {logger.Fatal(err)}
}
go run main.go
服务端配置操作完成
4.3 生成客户端
go-micro new client helloworld
需要把helloworld/proto修改为helloworld-client/proto
go mod tidygo get github.com/go-micro/plugins/v4/registry/consul
main.go
package mainimport ("context""time"pb "helloworld-client/proto""go-micro.dev/v4""go-micro.dev/v4/logger" "go-micro.dev/v4/registry""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "helloworld" //需要和微服务服务端对应的service名统一,这样才能调用该微服务version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry(//指定微服务的ip: 选择注册服务器地址,默认为本机,也可以选择consul集群中的clientregistry.Addrs("127.0.0.1:8500"),)// Create servicesrv := micro.NewService(//注册consulmicro.Registry(consulReg),)srv.Init()// 创建客户端实例c := pb.NewHelloworldService(service, srv.Client())for {// Call service: CallRequest就是.proto中的rsp, err := c.Call(context.Background(), &pb.CallRequest{Name: "张三"})if err != nil {logger.Fatal(err)}logger.Info(rsp)//每隔一段时间请求time.Sleep(2 * time.Second) // 每隔2秒请求}
}
客户端:
服务端:
客户端配置操作完成
5.goodsinfo 服务
5.1 服务端开发
go-micro new service goodsinfo
goodsinfo.proto
syntax = "proto3";package goodsinfo;option go_package = "./proto;goodsinfo";//商品相关方法
service Goodsinfo {//AddGoods: 定义增加商品的微服务, 这里的写法和gRPC中的写法一致rpc AddGoods(AddRequest) returns (AddResponse) {}
}//和gRPC中的写法一致
message AddRequest {string title = 1;string price = 2;string content = 3;
}//和gRPC中的写法一致
message AddResponse {string message = 1;bool success = 2;
}
#init:引入相关包
go get -u google.golang.org/protobuf/proto
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
#proto: 生成protobuf相关文件
protoc --proto_path=. --micro_out=. --go_out=:. proto/goodsinfo.proto
go get go-micro.dev/v4
go mod tidy
修改远程调用的方法handler/goodsinfo.go
package handlerimport ("context""go-micro.dev/v4/logger"pb "goodsinfo/proto"
)type Goodsinfo struct{}func (e *Goodsinfo) AddGoods(ctx context.Context, req *pb.AddRequest, rsp *pb.AddResponse) error {logger.Infof("request: %v", req)//书写返回的逻辑结果rsp.Message = "增加成功"rsp.Success = truereturn nil
}
引入consul
go get github.com/go-micro/plugins/v4/registry/consul
maiin.go
package mainimport ("goodsinfo/handler"pb "goodsinfo/proto""go-micro.dev/v4""go-micro.dev/v4/logger""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "goodsinfo"version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry()// Create servicesrv := micro.NewService(micro.Address("127.0.0.1:8080"), //指定微服务的ip: 选择注册服务器地址,也可以不配置,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),//注册consulmicro.Registry(consulReg),)srv.Init(micro.Name(service),micro.Version(version),)// Register handlerif err := pb.RegisterGoodsinfoHandler(srv.Server(), new(handler.Goodsinfo)); err != nil {logger.Fatal(err)}// Run serviceif err := srv.Run(); err != nil {logger.Fatal(err)}
}
go run main.go
服务端开发成功
5.2 客户端开发
go get go-micro.dev/v4go get github.com/go-micro/plugins/v4/registry/consulgo mod tidy
main.go
package mainimport ("context""go-micro.dev/v4/registry""time"pb "goodsinfo-client/proto""go-micro.dev/v4""go-micro.dev/v4/logger""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "goodsinfo"version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry(//指定微服务的ip: 选择注册服务器地址,默认为本机,也可以选择consul集群中的clientregistry.Addrs("127.0.0.1:8500"),)// Create servicesrv := micro.NewService(//注册consulmicro.Registry(consulReg),)srv.Init()// 创建客户端服务c := pb.NewGoodsinfoService(service, srv.Client())// Call servicersp, err := c.AddGoods(context.Background(), &pb.AddRequest{Title: "我是一个商品",Price: "20.22",Content: "内容展示",})if err != nil {logger.Fatal(err)}logger.Info(rsp)
}
go run .\main.go
客户端开发成功, 并通过consul调用服务端的请求
相关文章:
![](https://img-blog.csdnimg.cn/direct/480ef57be4364cfbabcc63e8979c242b.png)
[Go 微服务] go-micro + consul 的使用
文章目录 1.go-micro 介绍2.go-micro 的主要功能3.go-micro 安装4.go-micro 的使用4.1 创建服务端4.2 配置服务端 consul4.3 生成客户端 5.goodsinfo 服务5.1 服务端开发5.2 客户端开发 1.go-micro 介绍 Go Micro是一个简化分布式开发 的微服务生态系统,该系统为开…...
![](https://www.ngui.cc/images/no-images.jpg)
嵌入式网页服务实现
嵌入式网页服务的实现方式主要可以归纳为以下几种: 单片机Webchip网关: Webchip:作为专用网络接口芯片,独立于单片机与网关,通过SPI接口与MCU进行指令交互,并通过RS232、USB、Modem等接口与PC作为网关进行通…...
![](https://img-blog.csdnimg.cn/direct/983f410b1166471c9b9a22ae9e504fce.png)
python---OpenCv(二),背景分离方法较有意思
目录 边界矩形 旋转矩形(最小外接矩形): 计算轮廓 找4个点的坐标 把浮点型转为Int 画轮廓 边界矩形--(最大外接矩形) 转灰度 找轮廓 找顶点 画矩形 显示 背景分离方法(这个很好玩,可以识别在动的物体) 边…...
![](https://www.ngui.cc/images/no-images.jpg)
java TCP服务器与客户端通信示例
目录 背景: TCP服务代码解析: TCP服务器的代码: 服务器程序的工作流程: TCP客户端代码解析 : TCP客户端代码: 客户端工作流程: 总结: 背景: 如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP(Transmission Control Protocol&…...
![](https://www.ngui.cc/images/no-images.jpg)
【C++】构造函数和析构函数
目录 对象初始化-构造函数构造函数的分类构造函数的调用拷贝构造的应用构造函数调用规则深拷贝和浅拷贝初始化列表类对象作为类成员静态成员 对象释放-析构函数 对象初始化-构造函数 构造函数是类实例化的时候会自动调用的初始化函数,如果用户不写编译器会提供一个…...
![](https://www.ngui.cc/images/no-images.jpg)
Docker Compose:多容器应用的管理利器
在现代应用开发中,微服务架构已成为主流。管理和编排多个容器应用变得至关重要。Docker Compose 是一个强大的工具,通过一个简单的 YAML 文件定义和运行多容器应用。本文将详细介绍 Docker Compose 的基本概念、安装、用法以及一个实际的示例,…...
![](https://img-blog.csdnimg.cn/direct/f67bdb4986c0437e9756ff223b2a7501.png)
Leetcode - 133双周赛
目录 一,3190. 使所有元素都可以被 3 整除的最少操作数 二,3191. 使二进制数组全部等于 1 的最少操作次数 I 三,3192. 使二进制数组全部等于 1 的最少操作次数 II 四,3193. 统计逆序对的数目 一,3190. 使所有元素都…...
![](https://img-blog.csdnimg.cn/direct/bce878a6fc5d418989f96af69bd82a4f.png)
C++总结
...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速
故障现象 一辆2016款吉利帝豪EV车,累计行驶里程约为28.4万km,车主反映车辆无法加速。 故障诊断 接车后路试,行驶约1 km,踩下加速踏板,无法加速,车速为20 km/h左右,同时组合仪表上的电机及控制…...
![](https://www.ngui.cc/images/no-images.jpg)
前端开发之webpack
安装与入门超详细!webpack入门教程(一)-腾讯云开发者社区-腾讯云...
![](https://www.ngui.cc/images/no-images.jpg)
将内容复制到剪贴板?分享 1 段优质 JS 代码片段!
大家好,我是大澈! 本文约 600 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段,使用 Clipboard API 实现将内容复制到剪贴板。 老规矩,先阅读代码片段并思考,再看代码解析…...
![](https://img-blog.csdnimg.cn/img_convert/83299683a259e76a939ded2fa85ce594.png)
MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载
MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片,简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程,也就是MAS0902量产过程: 注意:开卡转接线必须要用ASM1153E或JMS578主控…...
![](https://img-blog.csdnimg.cn/img_convert/aa319ad3169e914eb62efac0982cd030.png)
从我邮毕业啦!!!
引言 时间过的好快,转眼间就要从北邮毕业了,距离上一次月度总结又过去了两个月,故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络,欢迎Star! 毕业🎓 6月1号完成了自己的…...
![](https://img-blog.csdnimg.cn/direct/a4b4f051a5714166a5a8e7162b5a9939.png)
gemini 1.5 flash (node项目)
https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…...
![](https://img-blog.csdnimg.cn/direct/489c33ddf993426a829c356e7001c372.png)
在线字节大端序小端序转换器
具体请前往:在线字节大端序小端序转换器...
![](https://www.ngui.cc/images/no-images.jpg)
css_17_背景属性鼠标属性
一.背景属性 -属性值:background-color(设置背景颜色) 默认背景颜色是 transparent。 -属性值:background-image(设置背景图片) url(图片的地址) -属性值:background-re…...
![](https://www.ngui.cc/images/no-images.jpg)
Python hash编码(go hash编码)
id"中国人" 首先,go语言hash: import (mmh3 "murmurhash3") mmh3.Murmurhash3([]byte(id)) 对应到Python hash编码,可以直接使用mmh3 import mmh3 mmh3.hash(id,signedFalse) 其源码可以表示为 def sum32WithSeed(datas, seed…...
![](https://www.ngui.cc/images/no-images.jpg)
004 插入排序(lua)
文章目录 123 1 -- Lua中没有类和方法的概念,所以我们将所有功能都写在一个脚本中 -- 交换数组中两个元素的功能 local function swap(arr, i, j) local temp arr[i] arr[i] arr[j] arr[j] temp end -- 插入排序算法的实现 local function insertionS…...
![](https://img-blog.csdnimg.cn/direct/f0604cded50040c19e7a1b81849aa63b.png#pic_center)
计算机网络 —— 基本概念
基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…...
高精度除法的实现
高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …...
![](https://img-blog.csdnimg.cn/direct/49b631b438254cd891c5ffafb8ee1a06.png)
STM32CUBEMX配置USB虚拟串口
STM32CUBEMX配置USB虚拟串口 cubemx上默认配置即可。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 配置完后生成工程,主要就是要知道串口的收发接口就行了。 发送:CDC_Transmit_FS(),同时记得包含头文件#include “…...
![](https://www.ngui.cc/images/no-images.jpg)
安卓开发中margin和padding的区别
在 Android 开发中,margin 和 padding 都是用来定义视图(View)的空间属性,但它们的作用和应用场景有所不同: Margin(外边距): Margin 是视图与其他视图之间的空间。它定义了视图之间…...
![](https://www.ngui.cc/images/no-images.jpg)
Symfony事件调度系统:掌控应用程序生命周期的钥匙
Symfony事件调度系统:掌控应用程序生命周期的钥匙 引言 Symfony是一个高度灵活的PHP框架,用于构建各种规模的Web应用程序。它的核心特性之一是事件调度系统,该系统允许开发者在应用程序的生命周期中触发和监听事件。这种机制为开发者提供了…...
![](https://img-blog.csdnimg.cn/direct/865ad6013cf64145b1819c1add074b45.png)
maven安装jar和pom到本地仓库
举例子我们要将 elastic-job-spring-boot-starter安装到本地的maven仓库,如下: <dependency><groupId>com.github.yinjihuan</groupId><artifactId>elastic-job-spring-boot-starter</artifactId><version>1.0.5&l…...
![](https://img-blog.csdnimg.cn/direct/5d2d1941f83e4bda9ed38f7d0460a3de.png)
[leetcode]assign-cookies. 分发饼干
. - 力扣(LeetCode) class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int m g.size(), n s.size();int count 0;for (int i 0, j 0; i…...
![](https://www.ngui.cc/images/no-images.jpg)
如何轻松解决复杂文档格式转换问题
上周,我遇到了一个棘手的问题:需要将一大堆PDF文件转换成可编辑的Word文档,时间紧迫,手动转换根本来不及。朋友推荐我使用了一个网站——xuelin.cc,这个网站不仅提供强大的AI对话功能,还能轻松完成各种文档…...
![](https://img-blog.csdnimg.cn/direct/bb4c1491a6e44e1a92cdac9c2af2b620.png)
日期类(java)
文章目录 第一代日期类 Date常用构造方法SimpleDateFormat 日期格式化类日期转字符串(String -> Date)字符串转日期 (String->Date) 第二代日期类 Calendar常用字段与如何得到实例对象相关 API 第三代日期类(LocalDate\TIme)日期,时间&…...
![](https://www.ngui.cc/images/no-images.jpg)
【深度学习】C++ Tensorrt Yolov8 目标检测推理
C Tensorrt Yolov8 目标检测推理 模型导出代码yolov8.hyolov8.cppcommon.hppCMakeListmain.cpp C tensorrt对yolov8目标检测模型进行推理。 Windows版本下只需要修改common.hpp对文件的判断S_ISREG 和对文件夹的判断S_ISDIR即可,非核心代码,不调用删掉都…...
![](https://i-blog.csdnimg.cn/direct/64b2a29f4f2345a7987abc3c36b64f42.png)
【项目日记(二)】搜索引擎-索引制作
❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多项目内容 目录 1.前言2.索引结构2.1创捷索引2.2根据索引查询2.3新增文档2.4内存索引保存到磁盘2.5把…...
![](https://img-blog.csdnimg.cn/direct/4fdc33ac3bc84fdabf81974a0c912466.png)
K 近邻、K-NN 算法图文详解
1. 为什么学习KNN算法 KNN是监督学习分类算法,主要解决现实生活中分类问题。根据目标的不同将监督学习任务分为了分类学习及回归预测问题。 KNN(K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法…...
![](https://img-blog.csdnimg.cn/direct/4eedafed5ca347ceb2741580448c236c.png#pic_center)
Eclipse + GDB + J-Link 的单片机程序调试实践
Eclipse GDB J-Link 的调试实践 本文介绍如何创建Eclipse的调试配置,如何控制调试过程,如何查看修改各种变量。 对 Eclipse 的要求 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。从 https://www.eclipse.org/downloads/packages/ 下载 Ecli…...
![](https://www.ngui.cc/images/no-images.jpg)
前端代码生成辅助工具
1,Axure Axure设计的界面如何生成HTML文件 https://blog.csdn.net/qq_43279782/article/details/112387511 Axure 生成HTML 文件,并用Chrome打开 https://blog.csdn.net/qq_30718137/article/details/80621025 2,OpenUI [开源] OpenUI …...
![](https://www.ngui.cc/images/no-images.jpg)
静态库与动态库总结
一、库文件和头文件 所谓库文件,可以将其理解为压缩包文件,该文件内部通常包含不止一个目标文件(也就是二进制文件)。 值得一提的是,库文件中每个目标文件存储的代码,并非完整的程序,而是一个…...
![](https://www.ngui.cc/images/no-images.jpg)
深入解析tcpdump:网络数据包捕获与分析的利器
引言 在网络技术日新月异的今天,网络数据包的捕获与分析成为了网络管理员、安全专家以及开发人员不可或缺的技能。其中,tcpdump作为一款强大的网络数据包捕获分析工具,广泛应用于Linux系统中。本文将从技术人的角度,详细分析tcpdu…...
![](https://img-blog.csdnimg.cn/direct/2dbef4e198d340568596f111de6e4b1a.png)
【漏洞复现】科立讯通信有限公司指挥调度管理平台uploadgps.php存在SQL注入
0x01 产品简介 科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、…...
![](https://img-blog.csdnimg.cn/direct/ca3213da757b4489b8542caec40cffe4.png)
什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术
什么是自然语言处理? 自然语言处理(Natural Language Processing,简称NLP)是人工智能的一个重要分支,旨在让计算机理解、解释和生成人类的自然语言。打个比方,你和Siri对话,或使用谷歌翻译翻译一…...
![](https://www.ngui.cc/images/no-images.jpg)
【linux】gcc快速入门教程
目录 一.gcc简介 二.gcc常用命令 一.gcc简介 gcc 是GNU Compiler Collection(GNU编译器套件)。就是一个编译器。编译一个源文件的时候可以直接使用,但是源文件数量太多时,就很不方便,于是就出现了make 工具 二.gcc…...
![](https://img-blog.csdnimg.cn/direct/16170862a3834b038324ea264d243309.png)
【多维动态规划】Leetcode 97. 交错字符串【中等】
交错字符串 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串 子字符串 是字符串中连续的 非空 字符序列。 s s1 s2 … snt…...
![](https://www.ngui.cc/images/no-images.jpg)
【JavaScript脚本宇宙】精通前端开发:六大热门CSS框架详解
前端开发的利器:深入了解六大CSS框架 前言 在现代Web开发中,选择适合的前端框架和工具包是构建高效、响应式和美观的网站或应用程序的关键。本文将详细介绍六个广受欢迎的CSS框架:Bootstrap、Bulma、Tailwind CSS、Foundation、Materialize…...
![](https://img-blog.csdnimg.cn/direct/b1f09219041e43a6ba9c4fcc1e841a11.png)
开发技术-Java集合(List)删除元素的几种方式
文章目录 1. 错误的删除2. 正确的方法2.1 倒叙删除2.2 迭代器删除2.3 removeAll() 删除2.4 removeIf() 最简单的删除 3. 总结 1. 错误的删除 在写代码时,想将其中的一个元素删除,就遍历了 list ,使用了 remove(),发现效果并不是想…...
![](https://www.ngui.cc/images/no-images.jpg)
c++ 递归
递归函数是指在函数定义中调用自身的函数。C语言也支持递归函数。 下面是一个使用递归函数计算阶乘的例子: #include <iostream> using namespace std;int factorial(int n) {// 基本情况,当 n 等于 0 或 1 时,阶乘为 1if (n 0 || n…...
![](https://img-blog.csdnimg.cn/direct/34c77753021f444385f733e8615a4774.png)
RedHat9 | podman容器
1、容器技术介绍 传统问题 应用程序和依赖需要一起安装在物理主机或虚拟机上的操作系统应用程序版本比当前操作系统安装的版本更低或更新两个应用程序可能需要某一软件的不同版本,彼此版本之间不兼容 解决方式 将应用程序打包并部署为容器容器是与系统的其他部分…...
![](https://www.ngui.cc/images/no-images.jpg)
边缘计算项目有哪些
边缘计算项目在多个领域得到了广泛的应用,以下是一些典型的边缘计算项目案例: 1. **智能交通系统**:通过在交通信号灯、监控摄像头等设备上部署边缘计算,可以实时分析交通流量,优化交通信号控制,减少拥堵&…...
![](https://www.ngui.cc/images/no-images.jpg)
计算fibonacci数列每一项时所需的递归调用次数
斐波那契数列是一个经典的数列,其中每一项是前两项的和,定义为: [ F(n) F(n-1) F(n-2) ] 其中,( F(0) 0 ) 和 ( F(1) 1 )。 对于计算斐波那契数列的第 ( n ) 项,如果使用简单的递归方法,其时间复杂度是…...
![](https://img-blog.csdnimg.cn/direct/7362d22d8b43469fab22930b2160b854.png)
【教学类65-05】20240627秘密花园涂色书(中四班练习)
【教学类65-03】20240622秘密花园涂色书03(通义万相)(A4横版1张,一大 68张纸136份)-CSDN博客 背景需求: 打印以下几款秘密花园样式(每款10份)给中四班孩子玩一下,看看效果 【教学类…...
![](https://www.ngui.cc/images/no-images.jpg)
Python 学习之基础语法(一)
Python的语法基础主要包括以下几个方面,下面将逐一进行分点表示和归纳: 一、基本语法 1. 注释 a. 单行注释:使用#开头,例如# 这是一个单行注释。 b. 多行注释:使用三引号(可以是三个单引号或三个双引号&…...
![](https://img-blog.csdnimg.cn/direct/66687e420b1d430f8982ecdc4280d026.png)
日志分析-windows系统日志分析
日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆,查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下,Security.evtx即为W…...
![](https://img-blog.csdnimg.cn/direct/63ad6b1c91604c089b526309d42b6132.png)
【ARM】MDK工程切换高版本的编译器后出现error A1137E报错
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决工程从Compiler 5切换到Compiler 6进行编译时出现一些非语法问题上的报错。 2、 问题场景 对于一些使用Compiler 5进行编译的工程,要切换到Compiler 6进行编译的时候,原本无任何报错警告…...
![](https://img-blog.csdnimg.cn/direct/4a0aa3ae8e18466b9c3cded01616b530.png)
深入 SSH:解锁本地转发、远程转发和动态转发的潜力
文章目录 前言一、解锁内部服务:SSH 本地转发1.1 什么是 SSH 本地转发1.2 本地转发应用场景 二、打开外部访问大门:SSH 远程转发2.1 什么是 SSH 远程转发2.2 远程转发应用场景 三、动态转发:SSH 让你拥有自己的 VPN3.1 什么是 SSH 动态转发3.…...
![](https://www.ngui.cc/images/no-images.jpg)
python如何把一个函数的返回值,当成这个函数的参数值
python如何把一个函数的返回值,当成这个函数的参数值 1. 递归调用 递归是一种函数自己调用自己的方法。在递归调用中,你可以将前一次调用的返回值作为下一次调用的参数。 def recursive_function(x):# 函数逻辑if 条件满足:return 结果else:return rec…...
![](https://img-blog.csdnimg.cn/direct/2732fe1e134d4e149764e288b3cc938d.png#pic_center)
Python和MATLAB粘性力接触力动态模型半隐式欧拉算法
🎯要点 🎯运动力模型计算制作过程:🖊相机捕捉网球运动图,制定运动数学模型,数值微分运动方程 | 🖊计算运动,欧拉算法离散积分运动,欧拉-克罗默算法微分运动方程 &#…...
![](https://www.ngui.cc/images/no-images.jpg)
iOS苹果和Android安卓测试APP应用程序的区别差异
在测试过程中,我们经常会发现在 iOS和 Android平台上测试的 APP应用程序在功能上存在一些差异,这些差异可能会影响到我们的产品质量,并让我们不得不将一些 APP应用程序从 Android移动设备转移到 iOS平台。 那么,这些差异是如何发…...
![](https://www.ngui.cc/images/no-images.jpg)
实现Java中的图像处理功能
实现Java中的图像处理功能 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在本篇文章中,我们将探讨如何在Java中实现图像处理功能。图像处理是计算机…...
![](https://img-blog.csdnimg.cn/direct/4ee87204bf2c4ba18be8e21eac67f5a3.png)
CVD-Risk-Prevent 个性化心血管健康推荐系统:基于医学指南的规则框架与 LLM 的结合
CVD-Risk-Prevent 个性化心血管健康推荐系统:基于医学指南的规则框架与 LLM 的结合 提出背景推荐算法的选择选择疑问健康指标管理心血管风险因素目标设定实现目标的计划推荐的多维性 算法关键点:如何将心血管健康指标转换为多维推荐?确定风险…...
![](https://img-blog.csdnimg.cn/direct/af70d5f0ac3b40a9b89f5636069129d6.png)
STM32 ADC精度提升方法
STM32 ADC精度提升方法 Fang XS.1452512966qq.com如果有错误,希望被指出,学习技术的路难免会磕磕绊绊量的积累引起质的变化 硬件方法 优化布局布线,尽量减小其他干扰增加电源、Vref去耦电容使用低通滤波器,或加磁珠使用DCDC时尽…...
![](https://img-blog.csdnimg.cn/direct/12f54962add74a5c903288e83775c927.png#pic_center)
2.2.3 C#中显示控件BDPictureBox 的实现----控件实现
2.2.3 C#中显示控件BDPictureBox 的实现----控件实现 1 界面控件布局 2图片内存Mat类说明 原始图片:m_raw_mat ,Display_Mat()调用时更新或者InitDisplay_Mat时更新局部放大显示图片:m_extract_zoom_mat,更新scale和scroll信息后更新overla…...
![](https://img-blog.csdnimg.cn/direct/00be2652ff40456084132ec07ca07d47.png)
【busybox记录】【shell指令】rmdir
目录 内容来源: 【GUN】【rmdir】指令介绍 【busybox】【rmdir】指令介绍 【linux】【rmdir】指令介绍 使用示例: 删除空目录 - 默认 删除dirname下的所有空目录,包括因删除其他目录而变为空的目录 常用组合指令: 指令不…...
![](https://img-blog.csdnimg.cn/direct/efaaaa96b23d44038b02ba3efb59e638.png)
Midjourne进阶篇 | 个性化潮玩
当Midjourney遇上潮玩,你想不到的惊艳! 前言盲盒魔法公式**01.嘻哈潮玩****02.荧光猫少女****03.古风剑侠****04.音乐节少年****05.Q版古风少女** 总结 前言 以前,制作盲盒需要专业盲盒设计师完成,对于大部分人来说,这…...
![](https://www.ngui.cc/images/no-images.jpg)
哈工大机器人竞技队成立22年来4次获国际冠军
另获得中国冠/亚/季军13次、国家级科技奖励60余次、省级科技竞赛奖励50余次、多次获得“最佳技术奖”。早在2009年就力克群雄获得唯一一张亚太大学生机器人大赛的入场卷,代表中国在东京5场全胜获得冠军。 2013届队员王永锟填报高考志愿时,恰巧看到哈工大…...
![](https://www.ngui.cc/images/no-images.jpg)
算法基础之台阶-Nim游戏
台阶-Nim游戏 核心思想:博弈论 可以看作第i阶台阶上有i个含有i个石子的堆这样所有台阶上一共n!个堆就变成了经典Nim优化:发现偶数阶台阶上2n堆异或 0 , 奇数阶台阶异或 原本石子数量 因此 当遍历到奇数阶时异或一下就行 #include <iostream>…...
![](https://www.ngui.cc/images/no-images.jpg)
transformer的特点
Transformers是一种用于处理序列数据的神经网络架构,最初由Vaswani等人在2017年提出,主要用于自然语言处理任务。与传统的循环神经网络(RNN)和卷积神经网络(CNN)不同,Transformers采用了一种全新…...
![](https://www.ngui.cc/images/no-images.jpg)
机械行业工程设计资质乙级需要哪些人员
申请机械行业工程设计资质乙级需要的人员主要包括以下几个方面,具体要求和数量根据参考文章归纳如下: 一、主要专业技术人员 数量要求:主要专业技术人员数量应不少于所申请行业资质标准中主要专业技术人员配备表规定的人数。学历和职称要求…...