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

GO简单开发grpc

什么是grpc

首先我们需要了解,什么是grpc

gRPC(全称:google remote procedure call)是由Google开发的一个高性能、开源的远程过程调用(RPC)框架。它基于 HTTP/2 协议,并且使用 Protocol Buffers(Protobuf)作为接口定义语言,提供了不同系统之间高效、安全的通信方式。gRPC 支持多种语言(包括 Go、C++、Java、Python 等),并且提供了丰富的功能,比如流式处理、双向通信、负载均衡等。

前置条件,环境配置

我们之前简单地讲过关于它的配置:GO语言 使用protobuf-CSDN博客

这里就不过多的赘述了

protobuf语法

我们之前只简单的讲过如何写一个简单的proto文件

这里我们深入一点的讲解它的语法

我们来看一个简单的文档

syntax = "proto3";  // 语法版本

message Person {
  string name = 1;   // 字符串类型字段,编号为 1
  int32 age = 2;     // 32 位整数,编号为 2
  bool is_student = 3; // 布尔类型,编号为 3
}
 

syntax这个用来指定版本,我们现在学的都是proto3的版本

message Person由于我们使用的是go语言,这里我们就根据go的数据类型来讲
它定义了一个类似于go语言的struct结构体,结构体内部定义了数据的类型、名字、编号(编号不是值,只是编号没有赋值给变量)

它的数据类型有

类型说明
int3232位整数
int6464位整数
uint32无符号32位整数
uint64无符号64位整数
sint32有符号32位整数
sint64有符号64位整数
fixed32四字节固定长度整数
fixed64八字节固定长度整数
float32位浮点数
double64位浮点数
bool布尔值
string字符串
bytes二进制数据

嵌套

同时,我们也可以在message里面嵌套另一个message 

数组

proto里面定义数组的格式为:repeated 类型 name = 编号
转化为go代码后就是切片,并且长度和容量默认是0,我们都知道的切片存储的数据数量如果超出了容量,那么切片的容量就会翻倍

容量变化 : 0 - 1 - 2 - 4 - 8 - 16 - 32如果容量>1024,那么就不会翻倍,而是*1.25

Map

proto允许键值对的形式,即map,格式为:map<key类型,value类型> name = 编号
转化为go代码后也是这样的,因为go本身就有map类型

server

这个类型非常重要它的格式是:server name{ rpc name(a) returns(b) }
a和b都要是本文件内的message(或通过 import 正确导入的其他 proto 文件中的 message)

通过已有的proto文件生成go文件

这部分我们需要使用的命令是

protoc -I . go_out=. go-grpc_out=. helloworld.proto

指令        作用
-I .指定搜索当前目录下文件
go_out=.生成 Protobuf 序列化/反序列化代码,存放在当前目录下
go-grpc_out=.生成 gRPC 服务代码,存放在当前目录下
helloworld.proto文件名,可以指定单个也可以使用 *.proto指定所有当前目录下文件

对于生成文件存放的位置这里要注意

它是由两个因素组成的:1 proto文件内的option go_package指定的目录   2 go_out=. go-grpc_out=.命令行指定的目录

假如我的option go_package="a/b/c/d ;pb" 但是go_out=. go-grpc_out=.却指定当前目录下。最终文件生成位置是使用go_out=. go-grpc_out=.命令下创建一个目录d存放生成文件。pb是生成go文件的包的名字

生成的go文件里面都有哪些内容呢?

首先就是我们定义的message,它被转换为了go里面的结构体,还有该结构体的方法

以及server,它被抽象为一个接口,接口下有一些方法(rpc声明的)。我们想在go文件内使用这个接口,就需要定义一个结构体去实现该接口的所有方法。

假设我有一个proto文件

syntax = "proto3";option go_package = ".;pb";
service Greeter{rpc SayHi(One) returns (Two);
}message One{string name = 1;int64 Age = 2;
}message Two{string Return = 1;
}


这里要注意:使用protoc -I . go_out=. go-grpc_out=. helloworld.proto会生成两个文件,一个是helloworld.pb.go另一个是helloworld_grpc.pb.gp

两个文件存储的内容是不同的

helloworld.pb.go存储

部分说明示例
消息结构体对应 proto 中的 messagetype Request struct{...}
字段访问方法Getter 方法func (x *Request) GetName() string
序列化方法二进制编解码func (x *Request) Marshal() ([]byte, error)
工具方法重置/比较等func (x *Request) Reset()
描述符元信息

var file_helloworld_proto_rawDesc

helloworld_grpc.pb.gp存储
部分说明示例
客户端接口调用远程服务的存根type GreeterClient interface
服务端接口需要实现的方法type GreeterServer interface
注册函数服务端注册func RegisterGreeterServer(s grpc.ServiceRegistrar, srv GreeterServer)
方法描述符RPC 方法元数据_Greeter_SayHello_Handler
流式接口流式 RPC 支持type Greeter_SayHelloServer interface

这个文件里面定义了两个message,当我们生成go文件的时候它会变成struct结构体。Greeter会生成对应的接口,我们可以通过生成的go文件的结构体生成一个新的结构体对象,让这个对象实现接口的方法,这样这个结构体对象就实现了接口

如何实现grpc

我们现在已经有proto文件生成的go文件了,我们再来看如何实现服务端和客户端。

我们的想法是:客户端自己没有实现某方法的函数,但是可以调用服务端的函数进行操作

大致的过程是:

client调用server的服务,server完成处理后再返回给client

服务端

我们来看server的编写,这里我们依旧采用上面生成的go文件

首先我们需要有一个服务端的实例

我们使用:g := grpc.NewServer()

然后我们需要注册服务到这个服务端内,那我们注册的服务是什么呢?其实就是实现了接口的结构体

我们首先创建一个结构体

type Server struct {pb.UnimplementedGreeterServer
}

这里的pb是我们导入的生成的go文件,它属于这个包。我么就用这个

因为这个结构体要实现接口,接口内存在一个方法SayHi,所以结构体要实现这个方法

func (s *Server) SayHi(ctx context.Context, request *pb.One) (*pb.Two, error) {return &pb.Two{Return: "nihao" + request.Name + "今年",}, nil
}

这里的逻辑是自己写的,但是形参实参都要严格按照我们生成的go文件来写

ctx context.Context这个形参是一定要写并且一定要在第一位的,后面的形参是我们在写proto文件的时候就定义好的。返回值也是,只不过后面多了一个error类型的返回值。

这样,结构体Server就实现了接口,我们就可以把它注册到服务端了

pb.RegisterGreeterServer(g, &Server{})

这个注册的方法也是生成的go文件里面自动生成的。我们直接使用即可

这里的registerGreeterServer也是有说法的,我们在proto文件里面定义的server叫Greeter,所以这里就是RegisterGreeterServer,如果叫Nihao,那就是RegisterNihaoServer

然后我们就开始编写一个监听器,用于监听网络请求

lis, err := net.Listen("tcp", "localhost:8080")

 这里就是内置的net包创建的一个监听器,然后把监听器和注册的服务联系到一起

err = g.Serve(lis)

这样,当监听到对应ip的网络请求的时候就可以跳转到对应的服务了,这样一个简单的服务端就写完了

客户端

我们再来写客户端(发出请求的一方)

这里需要知道的是,它们需要有相同的proto文件以及生成的go文件

在这里就不需要实现什么接口之类的了,我们只需要做:建立连接,发送请求这两步

首先是建立连接:

需要提前导入"google.golang.org/grpc"

conn, err := grpc.Dial("localhost:8080", grpc.WithInsecure())

这里的localhost:8080是我们在服务端里面设置的,这样一个grpc的请求就建立完成了

既然有连接,那就需要有关闭连接的时候。我们使用defer conn.Close()关闭连接

c := pb.NewGreeterClient(conn)
r, err := c.SayHi(context.Background(), &pb.One{Name: "xxx",Age:  12,
})

我们创建一个客户端实例c

我们通过c调用SayHi方法,这个方法虽然比较简单,但是我们如果有能力完全可以换成很复杂很有用的业务逻辑。

r是服务端返回的数据

这样一个客户端就创建好了,我们先运行服务端再运行客户端就可以发现r正确的接收到了服务端的返回信息。

相关文章:

GO简单开发grpc

什么是grpc 首先我们需要了解&#xff0c;什么是grpc gRPC&#xff08;全称&#xff1a;google remote procedure call&#xff09;是由Google开发的一个高性能、开源的远程过程调用&#xff08;RPC&#xff09;框架。它基于 HTTP/2 协议&#xff0c;并且使用 Protocol Buffer…...

强引用,弱引用,软引用,虚引用,自旋锁,读写锁

强引用&#xff1a;强引用GC不会回收 软引用&#xff1a;内存够的话不回收&#xff0c;内存不够的话回收 弱引用&#xff1a;不管内存够不够&#xff0c;只要有GC就回收 虚引用&#xff1a;点get是null&#xff0c;但是GC后他会把引用放到引用队列里边 自旋锁&#xff1a;是指尝…...

C++异常处理 throw try catch

C 异常处理概述 C 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复&#xff0c;并防止程序出现崩溃。C 使用 try, throw, 和 catch 关键字来实现异常处理。 异常处理的基本结构&#xff1a; throw: …...

优化 Web 性能:管理第三方资源(Third-Party Summary)

在现代 Web 开发中&#xff0c;第三方资源&#xff08;如分析工具、广告脚本、字体服务&#xff09;为网站提供了丰富的功能&#xff0c;但也可能成为性能瓶颈。Google 的 Lighthouse 工具在性能审计中提供了“第三方资源概要”&#xff08;Third-Party Summary&#xff09;&am…...

第六章、 系统级 I/O

真题考点 考点一&#xff1a;Unix I/O 所有的 I/O 设备(例如网络、磁盘和终端)都被模型化为文件&#xff0c;而所有的输入和输出都被当作对相应文件的读和写来执行。这种将设备优雅地映射为文件的方式&#xff0c;允许 Linux 内核引出一个简单、低级的应用接口&#xff0c;称为…...

Jetpack Compose 自定义标题栏终极指南:从基础到高级实战

Jetpack Compose 自定义标题栏终极指南&#xff1a;从基础到高级实战 本文将带你彻底掌握 Compose 标题栏开发&#xff0c;涵盖 5 种专业级实现方案 性能优化技巧 完整可运行代码。 &#x1f4da; 核心方案对比 方案特点适用场景复杂度基础Row布局完全自定义&#xff0c;灵…...

晶晨S905-S905L-S905LB_S905M2通刷_安卓6.0.1_16S极速开机_线刷固件包

晶晨S905-S905L-S905LB_S905M2通刷_安卓6.0.1_16S极速开机_线刷固件包 线刷方法&#xff1a;&#xff08;新手参考借鉴一下&#xff09; 刷机工具版本请用2.2.0以上&#xff0c;导入固件后&#xff0c;刷机工具右侧两个擦除打勾&#xff0c;然后点开始。插上刷机神器&#xf…...

tkiner模块的初步学习

文章目录 一、前言二、概念2.1 安装2.2 窗口 三、小部件3.1 概述3.2 常用小部件3.2.1 Label3.2.2 Button3.2.3 Entry3.2.4 Text3.2.5 Listbox3.2.6 Checkbutton3.2.7 Radiobutton3.2.8 Scrollbar 3.3 更多小部件3.3.1 Scale3.3.2 Spinbox3.3.3. Progressbar 3.4 主题小部件 四、…...

Java常用数据结构操作方法全面总结

目录 一、List接口及其实现类二、Set接口及其实现类三、Map接口及其实现类四、Queue/Deque队列五、Stack栈六、树形结构七、注意事项与最佳实践总结 一、List接口及其实现类 核心实现类 ArrayList&#xff1a;基于动态数组LinkedList&#xff1a;基于双向链表 常用操作方法…...

Java的Selenium的特殊元素操作与定位之select下拉框

如果页面元素是一个下拉框&#xff0c;我们可以将此web元素封装为Select对象 Select selectnew Select(WebElement element); Select对象常用api select.getOptions();//获取所有选项select.selectBylndex(index);//根据索引选中对应的元素select.selectByValue(value);//选…...

STM32单片机入门学习——第15节: [6-3] TIM输出比较

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.05 STM32开发板学习——第15节: [6-3] TIM输出比较 前言开发板说明引用解答和科普一…...

力扣经典算法篇-9-跳跃游戏(贪心算法,反向递推)

题干&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 …...

java面向对象 - 封装、继承和多态

1.封装 定义 封装是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。通过访问控制修饰符(如private、protected、public)对属性和方法的访问进行限制,以此提升代码的安全性与可维护性。 要点 访问控制:运用private修饰属性,防止外部直…...

铁电液晶(FLC)与反铁电液晶(AFLC)

### **铁电液晶&#xff08;FLC&#xff09;与反铁电液晶&#xff08;AFLC&#xff09;的原理、区别及应用** --- ## **1. 基本原理** ### **&#xff08;1&#xff09;铁电液晶&#xff08;Ferroelectric Liquid Crystal, FLC&#xff09;** - **分子结构**&#xff1a; …...

经典算法 a^b

原题目链接 问题描述 求 a 的 b 次方对 p 取模的值&#xff0c;即计算&#xff1a; a^b mod p输入格式 输入一行&#xff0c;包含三个整数 a、b 和 p&#xff0c;中间用空格隔开。 输出格式 输出一个整数&#xff0c;表示 a^b mod p 的值。 数据范围 0 ≤ a, b ≤ 10^91 …...

Python解决“组成字符串ku的最大次数”问题

Python解决“组成字符串ku的最大次数”问题 问题描述测试样例解题思路代码 问题描述 给定一个字符串 s&#xff0c;该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 “ku”。每次可以随机从字符串中选一个字符&#xff0c;并且选中的字符不能再使…...

ubuntu22使用TrinityCore搭建魔兽世界服务器

目录 一、Ubuntu22工具下载二、服务端编译配置1. 从 git 上拉取服务端代码2. 编译客户端3. 修改配置文件4. 加载sql语句5. 下载客户端6. 下载必要sql文件 三、客户端连接配置四、游戏启动 一、Ubuntu22工具下载 下载所有需要的工具 sudo apt-get update sudo apt-get install…...

LeetCode - 739.每日温度问题单调栈解法

目录 问题描述 方法思路&#xff1a;单调栈 核心思想 为什么用单调栈&#xff1f; 算法步骤 代码实现与逐行解析 示例解析 复杂度分析 总结 问题描述 给定一个整数数组 temperatures&#xff0c;表示每天的温度&#xff0c;返回一个数组 answer&#xff0c;其中 answe…...

GESP:2025-3月等级8-T1-上学

时间限制 : 1 秒 内存限制 : 128 MB C 城可以视为由 n个结点与 m条边组成的无向图。这些结点依次以1,2,....n标号&#xff0c;边依次以 1,2...m标号。第i条边&#xff08;1<i<m &#xff09;连接编号为ui 与vi的结点&#xff0c;长度为li米。 小 A 的学校坐落在 C 城中…...

宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡安装pytorch

宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡是一款高性能移动 GPU&#xff0c;基于 NVIDIA 最新的 Blackwell 架构设计&#xff0c;通过修正架构&#xff08;Blackwell&#xff09;、显存类型与带宽&#xff08;GDDR7、960GB/s&#xff09;、Tensor Core 与 RT Core 全面…...

Qwen-7B-Chat 本地化部署使用

通义千问 简介 通义千问是阿里云推出的超大规模语言模型&#xff0c;以下是其优缺点&#xff1a; 优点 强大的基础能力&#xff1a;具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…...

数据结构,顺序存储线性表

//线性表顺序存储 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 #define ElemType int //定义结构体 typedef struct LinearList{ElemType elem[MAXSIZE];int last; }LinearList; //初始化链表 void InitList(LinearList &L){L.last-1; };…...

Matlab轴承故障信号仿真与故障分析

1.摘要 本文介绍了一个基于Matlab的轴承故障信号仿真与分析程序&#xff0c;旨在模拟和分析轴承内圈故障信号的特征。程序首先通过生成故障信号、共振信号和调制信号&#xff0c;添加噪声和离散化处理&#xff0c;构建模拟的振动信号&#xff0c;并保存相关数据。通过快速傅里…...

Git三剑客:工作区、暂存区、版本库深度解析

一、引言&#xff1a;为什么需要理解Git的核心区域&#xff1f; 作为开发者&#xff0c;Git是日常必备的版本控制工具。但你是否曾因以下问题感到困惑&#xff1f; 修改了文件&#xff0c;但 git status 显示一片混乱&#xff1f; git add 和 git commit 到底做了什么&#x…...

stack和queue

1.stack的使用 函数说明接口说明 stack() 构造空的栈 empty 检测stack是否为空 size 返回stack中元素的个数 top 返回栈顶元素的引用 push 将元素val压入stack中 pop 将stack中尾部的元素弹出 void test_stack() {stack<int> st;st.push(1);st.push(2);st.push(3);s…...

【补题】Codeforces Round 1011 (Div. 2) C. Serval and The Formula

题意&#xff1a;给两个数&#xff0c;问你存不存在k使nmn异或m 思路&#xff1a; 为了让nmn异或m成功&#xff0c;很明显有两个数在同一位上最多只能有1个1。因为如果有两个就会导致数字变小&#xff0c;很明显nm是不可能成功的&#xff0c;因为你怎么搞都会有至少一个一模一…...

基于javaweb的SpringBoot汉服文化bbs系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

Vision_Robot

import time import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import socket import threading from datetime import datetime import logging import subprocess # 确保导入 subprocess 库 import os import pyautogu…...

爬虫练习案例

案例1&#xff1a; 爬取菜鸟教程左侧导航栏的分类内容&#xff1a; 在pycharm中书写代码。 先倒入相关模块。 import requests from bs4 import BeautifulSoup import lxml.etree as le这个案例写两种写法。 第一种&#xff1a; urlhttps://www.runoob.com/html/html-tuto…...

大数据时代的隐私保护:区块链技术的创新应用

一、引言 在当今数字化时代&#xff0c;大数据已经成为推动社会发展的关键力量。从商业决策到社会治理&#xff0c;从医疗健康到金融服务&#xff0c;数据的价值日益凸显。然而&#xff0c;随着数据的大量收集和广泛使用&#xff0c;隐私保护问题也日益突出。如何在充分利用大…...

力扣刷题-热题100题-第31题(c++、python)

25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reverse-nodes-in-k-group/?envTypestudy-plan-v2&envIdtop-100-liked 常规模拟 根据翻转的长度找到头和尾&#xff0c;进入函数进行翻转 主程序里有循环不断找到头和尾并拼…...

(四)数据检索与增强生成——让对话系统更智能、更高效

上一篇&#xff1a;&#xff08;三&#xff09;链式工作流构建——打造智能对话的强大引擎 在前三个阶段&#xff0c;我们已经搭建了一个基础的智能对话&#xff0c;并深入探讨了输入输出处理和链式工作流构建的细节。今天&#xff0c;我们将进入智能对话系统的高级阶段——数…...

Turtle图形化编程知识点汇总:让编程更有趣

友情提示&#xff1a;本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台gpt-4-turbo模型生成&#xff0c;仅供参考! 在学习编程的过程中&#xff0c;许多初学者会接触到Python的turtle图形库&#xff0c;它是一种图形化编程工具&#xff0c;通过简单的…...

Social GAN(CVPR2018)

文章目录 AbstractIntroductionRelated WorkHuman-Human InteractionRNNs for Sequence PredictionGenerative Modeling MethodProblem DefinitionGenerative Adversarial NetworksSocially-Aware GANPooling ModuleEncouraging Diverse Sample Generation Conclusion paper Ab…...

0201线性回归-机器学习-人工智能

文章目录 1 程序目标2 代码实现3 关键步骤解释4 示例输出5 注意事项结语 以下是一个使用 scikit-learn、pandas和 matplotlib 实现线性回归的完整程序示例。程序包含数据加载、模型训练、预测和可视化。 1 程序目标 加载数据&#xff08;使用 pandas&#xff09;数据预处理&am…...

2-Visual Studio 2022 NET开发Windows桌面软件并连接SQL Server数据库

引言 今天尝试Visual Studio 2022 NET开发一个NET桌面软件&#xff0c;并尝试连接SQL Server的数据库&#xff0c;此文章为开发笔记。 --------------------------------------------------------------------------------------------------------------------------------- …...

OpenGL学习笔记(简介、三角形、着色器、纹理、坐标系统、摄像机)

目录 简介核心模式与立即渲染模式状态机对象GLFW和GLAD Hello OpenGLTriangle 三角形顶点缓冲对象 VBO顶点数组对象 VAO元素缓冲对象 EBO/ 索引缓冲对象 IEO 着色器GLSL数据类型输入输出Uniform 纹理纹理过滤Mipmap 多级渐远纹理实际使用方式纹理单元 坐标系统裁剪空间 摄像机自…...

第二十九章:Python-mahotas库:图像处理的高效工具

一、mahotas库简介 mahotas是一个功能强大的Python图像处理库&#xff0c;提供了丰富的图像处理算法和工具&#xff0c;包括图像分割、特征提取、滤波、形态学操作等。它以简洁的API和高效的性能著称&#xff0c;特别适合处理大型图像。资源绑定附上完整资料供读者参考学习&…...

【网络安全】 防火墙技术

防火墙是网络安全防御的重要组成部分&#xff0c;它的主要任务是阻止或限制不安全的网络通信。在这篇文章中&#xff0c;我们将详细介绍防火墙的工作原理&#xff0c;类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例&#xff0c;以便于初学者理解。 一、什么…...

关于Linux系统安装和优化的教程

书籍教程 《Linux 就该这么学》&#xff1a;涵盖多种 Linux 发行版的安装知识&#xff0c;从安装前硬件检测&#xff08;如硬盘容量需至少 10GB、内存至少 2GB &#xff09;、软件源选择&#xff0c;到安装步骤&#xff08;如镜像烧录、启动设置、分区操作 &#xff09;都有详…...

还是主题混合程序设计

以下是针对您现有代码的完整主题化改造方案&#xff0c;实现跨QML/Qt Widgets的阴影主题系统&#xff1a; 一、主题管理系统核心 // thememanager.h #pragma once #include <QObject> #include <QColor> #include <QMap> #include <QQmlEngine>class…...

【FPGA开发】利用状态机思想点亮流水灯/初学hdlbitsFPGA教程网站

一、状态机思想介绍 状态机是一种用于描述系统行为的形式化模型&#xff0c;它将系统抽象为有限的状态&#xff0c;并通过状态转移来响应外部输入或事件。其核心思想是&#xff1a;系统在任何时刻只处于一个确定的状态&#xff0c;且在不同状态之间按规则切换。状态机是处理明…...

洛谷 P3214 [HNOI2011] 卡农

题目传送门 前言 再次败在 d p dp dp 手下&#xff0c;但是数据范围这么小应该是可以看出是 d p dp dp 的&#xff08;毕竟对于其他组合数的问题数据范围都是 1 0 9 10^9 109 起步&#xff09;。 思路 题意简化 现有 1 , 2 , 3 , . . . , n − 1 , n 1, 2, 3, ... , n -…...

智能体和RPA都需要程序思维,如何使用影刀的变量?

欢迎来到涛涛聊AI&#xff0c; 不管AI还是RPA&#xff0c;都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型&#xff0c;可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值&#xff0c;会根据不同的类型设置…...

使用OpenFeign实现服务远程调用

在微服务架构中&#xff0c;由于业务功能的分工不同&#xff0c;我们把项目拆分为多个独立的服务&#xff0c;并常常将其部署在不同的服务器上&#xff0c;这个时候如果服务A的某个功能需要借助服务B来实现&#xff0c;那么这个时候如何去调用就成了问题&#xff0c;目前有一种…...

【移动计算】:AndroidStudio安装和项目搭建【2019:版本3.5.2】

文章目录 1. 下载安装包2. 安装包安装2.1 运行完exe进行安装选择Cancel&#xff1a; Unable SdkInstall Type选择Custom可以选择更新最新版本&#xff1a;这里不选择点击Next勾选 Android Sdk Platform API 虚拟设备选项显示已安装否则也需要勾选设置自定义安装地址&#xff1a…...

泡棉压缩对显示模组漏光的定位分析及论述

■背景 液晶LCD受到外力或者挤压后&#xff0c;比较容易出现漏光现象即显示mura。一般从结构设计的角度会做如下措施进行整改 1>控制背光和上铁框平整度 ; 2>合理设计液晶模组的厚度和边框大小 ; 3>承载液晶面板的泡棉选取 ; 4>FPC单双层区的设计 ; 5>合理…...

当AI助理接管云计算-走向智能运维的新时代

目录 时代背景 AI在云计算运维上的帮助 新时代产物&#xff1a;WatchAlert 新时代思考 时代背景 代理人工智能&#xff1a;自主决策的未来--Gartner2025十大顶级科技预测第一名 Gartner将代理人工智能列为2025年的顶级技术趋势。该技术通过快速分析用于药物发现的海量数据…...

Day2:前端项目uniapp壁纸实战

先来做一个轮番图。 效果如下&#xff1a; common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…...

使用人工智能大模型DeepSeek,如何进行论文润色和去重?

今天我们学习人工智能&#xff0c;如何协助我们进行论文润色和去重。手把手的学习视频地址请访问https://edu.csdn.net/learn/40402/666422 第一步在腾讯元宝对话框中输入如何协助老师做论文润色&#xff0c;通过提问&#xff0c;我们了解了老师写论文润色的步骤和建议。润色的…...