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

Go语言——kratos微服务框架使用

文章目录

  • 一、安装依赖
  • 二、创建项目
  • 三、初始化项目
  • 四、使用git_bash命令终端运行命令
  • 五、创建自己的项目
    • 1、修改app.proto
    • 3、internal/service/app.go
    • 4、修改internal/service/service.go文件
    • 5、创建internal/biz/content.go文件
    • 6、修改internal/biz/biz.go文件
    • 7、创建internal/data/content.go文件
    • 8.修改internal/data/data.go文件
  • 9、修改ContentManage/configs/config.yaml文件
    • 12、创建ContentManage/cmd/client/client.go,来rpc调用方法

一、安装依赖

  • 1、设置代理
    在这里插入图片描述
  • 2、安装依赖
# 安装Kratos tool
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest

二、创建项目

# 然后在GOPATH\bin目录下能找到kratos.exe,在需要创建项目的目录下执行,即可创建项目
kratos new helloworld
# 如果默认的github不通的话,可以用gitee拉取
kratos new helloworld -r https://gitee.com/go-kratos/kratos-layout.git

三、初始化项目

# 进入helloworld目录
cd helloworld
# 初始化项目
make init
  • 如果没有make命令,可以在网盘中下载
  • 如果没有protoc命令,也可以在网盘中下载,并配置其环境变量

四、使用git_bash命令终端运行命令

# 初始化
make init
# 生成api
make api
# 构建
make build
# 所有操作
make all
# 启动kracos
kracos run
# 测试
curl 'http://127.0.0.1:8000/kracos'

五、创建自己的项目

# 创建内容管理项目
kratos new ContentManage -r https://gitee.com/go-kratos/kratos-layout.git# 进入目录
cd ./ContentManage# 拉取依赖
go mod download# 1.添加我们的自定义协议,并修改为我们自定义的接口,如下
kratos proto add api/operate/app.proto# 2.修改完成之后,重新生成go文件
make api# 3.在internal/service下创建app.go文件。代码如下
# 4.修改internal/service/service.go文件
# 5.创建internal/biz/content.go文件
# 6.修改internal/biz/biz.go文件
# 7.创建internal/data/content.go文件
# 8.修改internal/data/data.go文件
# 9.修改ContentManage/configs/config.yaml文件
# 10.执行命令,重新生成代码
make all
# 11.启动
kratos run
# 12.创建ContentManage/cmd/client/client.go,来rpc调用方法

1、修改app.proto

syntax = "proto3";import "google/api/annotations.proto";package api.operate;option go_package = "ContentManage/api/operate;operate";
option java_multiple_files = true;
option java_package = "api.operate";service App {// 创建内容rpc CreateContent (CreateContentReq) returns (CreateContentResp) {option (google.api.http) = {post: "/api/cms/content/create",body: "content"};};
}message Content {// 内容idint64 id = 1;// 内容标题string title = 2;// 视频播放urlstring videoUrl = 3;// 作者string author = 4;// 内容描述string description =5;// 封面图urlstring thumbnail = 6;// 内容分类string category = 7;// 内容时长int64 duration = 8;// 分辨率string resolution = 9;// 文件大小int64 fileSize = 10;// 文件格式string format = 11;// 视频质量1-高清 2-标清int32 quality = 12;// 审核状态 1-审核中 2-审核通过 3-审核不通过int32 approvalStatus = 13;
}message CreateContentReq {// 内容Content content = 1;
}
message CreateContentResp {}

3、internal/service/app.go

package serviceimport ("ContentManage/api/operate""ContentManage/internal/biz"
)type AppService struct {operate.UnimplementedAppServeruc *biz.ContentUsecase
}// NewAppService new a app service.
func NewAppService(uc *biz.ContentUsecase) *AppService {return &AppService{uc: uc}
}

4、修改internal/service/service.go文件

package serviceimport "github.com/google/wire"// ProviderSet is service providers.
var ProviderSet = wire.NewSet(NewAppService)

5、创建internal/biz/content.go文件

package bizimport ("context""github.com/go-kratos/kratos/v2/log""time"
)type Content struct {Id             int           `gorm:"column:id;primary_key"`  // 内容idTitle          string        `gorm:"column:title"`           // 内容标题Description    string        `gorm:"column:description"`     // 内容描述Author         string        `gorm:"column:author"`          // 作者VideoUrl       string        `gorm:"column:video_url"`       // 视频播放URLThumbnail      string        `gorm:"column:thumbnail"`       // 封面页URLCategory       string        `gorm:"column:category"`        // 内容分类Duration       time.Duration `gorm:"column:duration"`        // 内容时长Resolution     string        `gorm:"column:resolution"`      // 分辨率FileSize       int64         `gorm:"column:file_size"`       // 文件大小Format         string        `gorm:"column:format"`          // 文件格式 如MP4等Quality        int32         `gorm:"column:quality"`         // 视频质量 1-高清 2-标清ApprovalStatus int32         `gorm:"column:approval_status"` // 审核状态 1-审核中 2-审核通过 3-审核不通过CreatedAt      time.Time     `gorm:"column:created_at"`      // 内容创建时间UpdatedAt      time.Time     `gorm:"column:updated_at"`      // 内容更新时间
}func (c Content) TableName() string {return "cms_content.t_content_detail"
}type ContentRepo interface {Create(context.Context, *Content) error
}type ContentUsecase struct {repo ContentRepolog  *log.Helper
}// NewContentUsecase new a Content usecase.
func NewContentUsecase(repo ContentRepo, logger log.Logger) *ContentUsecase {return &ContentUsecase{repo: repo, log: log.NewHelper(logger)}
}func (uc *ContentUsecase) CreateContext(ctx context.Context, content *Content) error {uc.log.WithContext(ctx).Infof("CreateContext: %v+v", content)return uc.repo.Create(ctx, content)
}

6、修改internal/biz/biz.go文件

package bizimport "github.com/google/wire"// ProviderSet is biz providers.
var ProviderSet = wire.NewSet(NewContentUsecase)

7、创建internal/data/content.go文件

package dataimport ("ContentManage/internal/biz""context""github.com/go-kratos/kratos/v2/log"
)type contentRepo struct {data *Datalog  *log.Helper
}func NewContentRepo(data *Data, logger log.Logger) biz.ContentRepo {return &contentRepo{data: data,log:  log.NewHelper(logger),}
}func (r *contentRepo) Create(ctx context.Context, content *biz.Content) error {r.log.Infof("contentRepo Create content = %+v", content)return r.data.db.Save(content).Error
}

8.修改internal/data/data.go文件

package dataimport ("ContentManage/internal/conf""gorm.io/driver/mysql""gorm.io/gorm""github.com/go-kratos/kratos/v2/log""github.com/google/wire"
)// ProviderSet is data providers.
var ProviderSet = wire.NewSet(NewData, NewContentRepo)// Data .
type Data struct {db *gorm.DB
}// NewData .
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {cleanup := func() {log.NewHelper(logger).Info("closing the data resources")}mysqlDB, err := gorm.Open(mysql.Open(c.GetDatabase().Source))if err != nil {log.Error("[data] failed to connect database", "error", err)panic(err)}db, err := mysqlDB.DB()if err != nil {log.Error("[data] failed to connect database", "error", err)panic(err)}db.SetMaxOpenConns(4)db.SetMaxIdleConns(2)return &Data{db: mysqlDB,}, cleanup, nil
}

9、修改ContentManage/configs/config.yaml文件

server:http:addr: 0.0.0.0:8000timeout: 1sgrpc:addr: 0.0.0.0:9000timeout: 1s
data:database:driver: mysqlsource: root:p@ssw0rd@tcp(127.0.0.1:3306)/?charset=utf8mb4&parseTime=True&loc=Localredis:addr: 127.0.0.1:6379read_timeout: 0.2swrite_timeout: 0.2s

12、创建ContentManage/cmd/client/client.go,来rpc调用方法

package mainimport ("ContentManage/api/operate""context""github.com/go-kratos/kratos/v2/log""github.com/go-kratos/kratos/v2/middleware/recovery""github.com/go-kratos/kratos/v2/transport/grpc"
)func main() {conn, err := grpc.DialInsecure(context.Background(),grpc.WithEndpoint("127.0.0.1:9000"),grpc.WithMiddleware(recovery.Recovery()),)if err != nil {panic(err)}defer conn.Close()client := operate.NewAppClient(conn)reply, err := client.CreateContent(context.Background(), &operate.CreateContentReq{Content: &operate.Content{Title:       "test content_manage create",VideoUrl:    "https://example.com/video.mp4",Author:      "lucky",Description: "test",},})if err != nil {log.Fatal(err)}log.Infof("[grpc] CreateContent %v\n", reply)
}

相关文章:

Go语言——kratos微服务框架使用

文章目录 一、安装依赖二、创建项目三、初始化项目四、使用git_bash命令终端运行命令五、创建自己的项目1、修改app.proto3、internal/service/app.go4、修改internal/service/service.go文件5、创建internal/biz/content.go文件6、修改internal/biz/biz.go文件7、创建internal…...

无人机飞控算法开发实战:从零到一构建企业级飞控系统

简介 无人机飞控算法是实现稳定飞行和精确控制的核心技术,涉及飞行动力学建模、传感器数据处理、状态估计和控制策略等多个环节。本实战指南将系统讲解四旋翼无人机飞控算法的开发流程,包括飞行动力学模型建立、传感器校准与数据融合、主流控制算法实现(PID、ADRC、EKF)以…...

MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构

大家好,我是此林。 目录 1. 前言 2. minimind模型源码解读 1. MiniMind Config部分 1.1. 基础参数 1.2. MOE配置 2. MiniMind Model 部分 2.1. MiniMindForCausalLM: 用于语言建模任务 2.2. 主干模型 MiniMindModel 2.3. MiniMindBlock: 模型的基本构建块…...

每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)

5.LC 零矩阵(中等) 面试题 01.08. 零矩阵 - 力扣(LeetCode) 思想: 法一: 利用两个集合分别储存要清0的行和列索引 另外两种原地优化空间的做法暂时不是目前刷题目标,故不考虑 代码 c: class Solution { public:void setZeroes(vector&l…...

POSIX信号量

目录 一、相关概念回顾 1.信号量 2.多线程使用资源的两种情况 3.P操作和V操作 二、CP && 基于环形队列的生产者消费者模型 1.环形队列的介绍 ​编辑 2.基于环形队列的生产者消费者模型的默认规则(通过信号量实现规则的成立) 3.相关的结论…...

前端Web开发HTML5+CSS3+移动web(基础-flex)

网页设计套路:从上到下,从整体到局部 1:HTML定义: (1)超文本是点击可以页面来回切换的链接 (2)标记就是标签语言 2:标签的语法 (1&…...

Java 原生异步编程与Spring 异步编程 详解

简介 Java 异步编程是现代高性能应用开发的核心技术之一,它允许程序在执行耗时操作(如网络请求、文件 IO)时不必阻塞主线程,从而提高系统吞吐量和响应性。 异步 vs 同步 同步:任务按顺序执行,后续任务需…...

AUTOSAR图解==>AUTOSAR_TR_HWTestManagementIntegrationGuide

AUTOSAR硬件测试管理集成指南 启动和关闭阶段硬件测试管理的规范与集成 目录 文档概述 1.1 文档范围 1.2 局限性目标与动机 2.1 目标 2.2 动机 2.3 用例约束与假设缩略语与术语相关文档HTMSS AUTOSAR集成方法HTMSS功能描述AUTOSAR架构解决方案 8.1 HTMSS系统架构 8.2 HTMSS启动…...

Day22 Kaggle泰坦尼克号训练实战

​ 作业 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 kaggle泰坦里克号人员生还预测 一、流程 思路概述 数据加载 :读取泰坦尼克号的训练集和测试集。数据预处理 :处理缺失值、对分类变量进行编码、…...

基于大核感知与非膨胀卷积的SPPF改进—融合UniRepLK的YOLOv8目标检测创新架构

在当前目标检测领域中,YOLO系列模型因其优异的速度-精度平衡能力而被广泛部署于工业界与科研场景。YOLOv8作为该系列的最新版本,在主干网络与特征金字塔结构上进行了多项优化,进一步提升了其实时性与鲁棒性。然而,其核心组件—SPP…...

[Linux]从零开始的STM32MP157 Busybox根文件系统构建

一、前言 在上一篇教程中,已经教了大家如何使用Buildroot构建根文件系统,并且在最后我们已经完整的构建了一个可以运行的根文件系统。但是,Buildroot的集成度太高了,不利于小白理解根文件系统,所以本次教程&#xff0c…...

C++ RAII机制

RAII(Resource Acquisition Is Initialization)是一种编程范式,核心思想是:资源的生命周期与对象绑定——对象创建时获取资源,对象销毁时自动释放资源。这种机制通过构造函数和析构函数的配对执行,确保资源…...

spring中的@Value注解详解

一、核心功能与作用 Value是Spring框架中用于动态注入属性值的注解,支持从配置文件、环境变量、SpEL表达式等来源注入数据,实现代码与配置的解耦。 注入类型覆盖广泛 基本类型:字符串、数值(int/double)、布尔值等。 …...

模型欠拟合是什么?

模型的欠拟合:全面解析 一、定义与核心概念 欠拟合(Underfitting)是指模型在训练数据、验证数据和测试数据上均表现不佳的现象。其本质是模型过于简单或学习能力不足,无法捕捉数据中的潜在规律和复杂关系,导致泛化能力差。例如,用线性模型拟合非线性数据时,模型无法描…...

IC ATE集成电路测试学习——电流测试的原理和方法

电流测试 我们可以通过电流来判断芯片的工作状态时,首先先了解下芯片的电流是如何产生的。 静态电流 理论上,CMOS结构的芯片静态时几乎不耗电 CMOS基本结构:Pmos Nmos 串联当逻辑电平稳定时: ➜ 要么Pmos导通,Nmo…...

Wordpress头像无法加载太慢问题解决方式

Wordpress头像无法加载太慢问题解决方式 1、找到我们当前使用的主题目录中找到functions.php文件在文件最后面添加以下代码 if ( ! function_exists( get_cravatar_url ) ) {/***替换Gravatar头像为Cravatar头像** param string $url** return string*/function get_cravatar…...

《大模型微调实战:Llama 3.0全参数优化指南》

全参数微调(Full Parameter Fine-Tuning)是推动大模型适应垂直领域任务的核心技术,尤其对于Llama 3.0这类千亿级参数模型而言,其性能优化与场景适配能力直接决定了实际应用价值。然而,全参数微调面临计算成本高、内存占…...

ActiveMQ 生产环境问题排查与调优指南(二)

五、调优策略与实践 5.1 JVM 调优 JVM 调优对于提升 ActiveMQ 性能至关重要,合理的 JVM 配置可以使 ActiveMQ 更高效地利用系统资源,减少性能瓶颈。 设置合理的堆内存大小是 JVM 调优的关键步骤。堆内存是 JVM 中用于存储对象实例的区域,其…...

AugmentCode 非常昂贵的新定价

AugmentCode 现在的价格比 Cursor 和 Windsurf 的总和还要贵。 AugmentCode 曾是我开发工作流程的常用工具。出乎意料的是,他们改变了定价结构,让开发者们震惊不已。 原来的30 美元月费已经增长为50 美元月费,这是一个67%的增长。 改变我看法的不仅仅是价格上涨,还有他…...

Unity 红点系统

首先明确一个,即红点系统的数据结构是一颗树,并且红点的数据结构的初始化需要放在游戏的初始化中,之后再是对应的红点UI侧的注册,对应的红点UI在销毁时需要注销对红点UI的显示回调注册,但是不销毁数据侧的红点注册 - …...

Python-UV多环境管理

Python-UV多环境管理 Python使用UV进行环境管理,系统了解UV的使用 文章目录 Python-UV多环境管理 [toc]1-学习要点2-核心知识点3-UV多环境管理4-venv和uv脚本对比1-venv环境管理2-uv环境管理3-venv对比uv 1-学习要点 1-熟悉【UV环境管理】2-熟悉【UV和Venv脚本区别…...

多空短线决策+飞云分仓操盘,两个副图指标组合操盘技术,短线更精准有效

如上图,两个副图指标,第一个【短线多空决策】,第二个副图指标【飞云分仓操盘】,指标组合使用,精准性和有效性更加有效。 如上图,两个指标组合使用,我们选择第二个副图指标出现红色和紫色区域的标…...

istio in action之应用弹性与容错机制

在分布式系统中,服务间的依赖关系就像一张错综复杂的网络,任何一个节点的抖动都可能引发连锁反应。这也是为什么我们需要强调弹性,因为在分布式系统中,服务之间通过网络进行通信,这本身就引入了无数个潜在的失败点。我…...

将PyQt5设计的程序打包成.exe文件

打包教程 因为打包的机制是会把当前的解释器的包也打包上,而我的环境经常会有一些较大的包,比如torch之类的。所以这里会创建一个单独的环境。 conda create -n image_process python3.8 激活环境 conda activate image_process 现在先安装我需要安装…...

Java原生结合MQTTX---完成心跳对话(附带源码)

简言:✨当Java遇上MQTT:打造会"隔空传话"的魔法程序✨ 导语:想不想让两个Java程序像哈利波特里的双面镜一样实时对话?今天我们将用MQTT协议EMQX,在Ubuntu上搭建一个魔法邮局,再亲手编写会传信的…...

redis数据结构-06(LRANGE、LINDEX、LSET、LREM)

列表操作:LRANGE、LINDEX、LSET、LREM Redis 列表不仅仅是简单的数组;它们是一种强大的数据结构,可以高效地操作有序数据。本课将深入探讨使用 Redis 列表的四个基本命令: LRANGE 、 LINDEX 、 LSET 和 LREM 。掌握这些命令将使您…...

4.4 os模块

os模块: chdir:修改工作路径 --- 文件所在位置的标识 getcwd():返回当前路径,如果修改了则显示修改后的路径 curdir:获取当前目录的表示形式 cpu_count():返回当前cpu的线程数 getppid(): 获取当前进程编号 getppid():获取当前进程的父进…...

在 Windows 系统上选择与部署 DICOM 医学影像开发工具与库

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...

MYSQL数据库集群高可用和数据监控平台(详细版)

项目说明 概述 该项目共分为2个子项目,由MYSQL集群高可用和数据监控平台两部分组成 MYSQL集群高可用属于云原生高级课数据库运维部分的知识 数据监控平台属于云原生拔高项目,旨在让学生增加知识面,提高项目实习经历,充实简历 …...

学习通刷课稳定版(美化面板+完全免费)

学习通刷 (美化面板完全免费) 安装教程方法一源码文件 方法二 提示结尾 安装教程 方法一 我们首先在浏览器打开脚本猫网站并获取该插件(浏览器以Edge为例) 脚本猫首页:https://scriptcat.org/zh-CN/ 第一步&#xff…...

python 实现sha加密

在Python中,SHA(Secure Hash Algorithm)是一种加密哈希函数,通常用于生成数据的哈希值。SHA算法是单向的,这意味着它只能用于加密(生成哈希值),而不能用于解密。因此,SHA…...

Linux epoll 详解:概念、使用、数据结构、流程及应用

epoll是什么? epoll 是从 Linux 2.6 起,Linux内核提供的一种高性能I/O事件通知机制,用于解决传统 select 和 poll 在处理大量并发连接时遍历、最大数量限制、频繁拷贝数据等问题。epoll 可以用来监听多个文件描述符(socket、管道…...

Kubernetes排错(十一):lsof命令实战场景

在Kubernetes生产环境中,lsof作为Linux系统的"透视眼",是排查容器级疑难杂症的必备工具。本文将深入解析其在容器化场景下的高阶用法,助你快速定位隐藏问题。 一、基础环境准备 1. 容器内安装lsof # 临时进入容器安装&#xff0…...

Java基础语法之循环结构

循环结构 1.定义 控制一段代码重复执行多次 2.分类 2.1 for循环 2.1.1 定义 控制一段代码反复执行很多次。 2.1.2 for循环格式 for (初始化语句; 循环条件; 迭代语句) { 循环体语句(重复执行的代码); }示例 // 输出3次HelloWorld for (int i 0; i < 3; i) { System…...

冒泡排序的原理

冒泡排序是一种简单的排序算法&#xff0c;它通过重复地遍历待排序的列表&#xff0c;比较相邻的元素并交换它们的位置来实现排序。具体原理如下&#xff1a; 冒泡排序的基本思想 冒泡排序的核心思想是通过相邻元素的比较和交换&#xff0c;将较大的元素逐步“冒泡”到列表的…...

AUTOSAR图解==>AUTOSAR_TR_InteractionWithBehavioralModels

AUTOSAR与行为模型交互详解 深入解析AUTOSAR软件组件与行为模型的交互关系与转换机制 目录 引言 1.1 AUTOSAR编辑工具概述 1.2 源起与目标 1.3 术语定义需求追溯AUTOSAR中行为建模的用例 3.1 软件组件的行为建模 3.2 软件组件描述到行为模型 3.3 行为模型到软件组件描述 3.4 组…...

GO语言内存管理结构

文章目录 1、内存分区1.1、栈&#xff08;Stack&#xff09;1.2、堆&#xff08;Heap&#xff09; 2、堆内存管理结构2.1、内存分配器&#xff08;MCache → MArena → MSpan → MHeap&#xff09;2.2、大小分类&#xff08;Size Class&#xff09;2.3、分配流程 3、垃圾回收&a…...

分享一些资料供大家学习

群里收集来的&#xff0c;自己感觉还是比较经典的&#xff0c;希望大家喜欢&#xff01;&#xff01;&#xff01; 20250428 夸克网盘分享一大波经典IT架构好货20250429夸克网盘分享精品文档-管理咨询师必备的思维模型20250430夸克网盘分享清华大学DeepSeek教程又来了《文科生A…...

RAGMCP基本原理说明和相关问题解惑

一、RAG架构原理和局限性 1.1 概念解释 RAG&#xff08;Retrieval-Augmented Generation&#xff09;&#xff1a;检索增强生成&#xff0c;让大模型接受外部输入后&#xff0c;总结输出 向量数据库&#xff1a;向量数据通常是高维空间中的点&#xff0c;代表复杂的数据结构…...

PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)

前言&#xff1a; 大二小学期python课上基于pygame做的一个游戏小demo&#xff0c;当时老师花了一天讲解了下python基础语法后&#xff08;也是整个大学四年唯一学习python的时间&#xff09;&#xff0c;便让我们自学网课一周然后交项目&#xff0c;所以做的非常仓促&#xff…...

Git标签

Git标签 1. 添加标签 使用 tag 命令可以给某次 commit 提交的版本打上标签&#xff0c;相当于这个 commit id 的别名&#xff0c;在实践中&#xff0c;会使用 v1.0 之类的标签提示这是正式版的第一个版本。 git tag v1.0 [commit id]缺省输入 commit id会给最新的一次提交打…...

USB学习【6】USB传输错误的处理

1.前言 我们从物理层到信号层&#xff0c;到协议层&#xff0c;他们分别在不同的层面完成不同的功能。 总结一下&#xff1a; 物理层实现了高低电平的检测。 信号层更进一步&#xff0c;通过一些方法&#xff0c;实现了二进制的传输。 协议层&#xff0c;因为可以二进制传输了…...

深入解析 Vision Transformer (ViT) 与其在计算机视觉中的应用

在近年来&#xff0c;深度学习尤其在计算机视觉领域取得了巨大的进展&#xff0c;而 Vision Transformer&#xff08;ViT&#xff09;作为一种新的视觉模型&#xff0c;它的表现甚至在许多任务中超过了传统的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;如 ResNet。在…...

《Go小技巧易错点100例》第三十一篇

本期分享&#xff1a; 1.Go struct内存对齐 2.使用空结构体(struct{})节省内存 Go struct内存对齐 在计算机系统中&#xff0c;CPU 访问内存时并不是逐字节读取的&#xff0c;而是以特定大小的块&#xff08;通常为 4/8 字节&#xff09;为单位进行读取。当数据的内存地址正…...

全栈项目实战:Vue3+Node.js开发博客系统

全栈项目实战&#xff1a;Vue3Node.js开发博客系统 一、项目架构设计 1. 技术栈选型 前端技术栈&#xff1a; Vue 3 Composition APITypeScriptPinia状态管理Vue Router 4Element Plus UI组件库Vite构建工具 后端技术栈&#xff1a; Node.js (Express/Koa)MongoDB (Mong…...

查看YOLO版本的三种方法

查看YOLO版本的三种方法&#xff1a; 一、通过命令行直接查询 使用Python交互式查询&#xff1a; from ultralytics import __version__ print(__version__) # 示例输出: 11.0.5二、检查PyTorch环境兼容性 import torch, ultralytics print(f"PyTorch: {torch.__versi…...

基于Docker的Bitwarden的私有本地部署

基于Docker的Bitwarden的私有本地部署 文章目录 基于Docker的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ &#xff0c;连接不是很稳定&#xff0c;也没有安全感&#xff0c;所以我选择了…...

点和体素哪个好

3D 深度学习中基于体素和基于点云的方法哪种更优&#xff1f;-腾讯云开发者社区-腾讯云 https://zhuanlan.zhihu.com/p/372497398 GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection....

C++ STL编程 vector空间预留、vector高效删除、vector数据排序、vector代码练习

vector空间预留&#xff0c;作用是避免申请每次申请内存&#xff0c;提高运行效率。 对应的接口是 vector.reverse() vector的高效删除&#xff0c;对应的代码见下&#xff0c;一个时间复杂度是n&#xff0c;一个时间复杂度是1 #include<iostream> #include<vector…...

Android架构模式推荐及分析和MVC架构模式制作一个简单的底部tab切换

目录 主流架构模式对比 适用场景 MVP‌&#xff1a;团队协作开发,需要高可测试性的项目 MVC架构模式制作一个简单的底部tab切换 &#xff08;Model-View-Controller&#xff09;结构 代码 效果 主流架构模式对比 ‌对比维度‌‌MVC‌ ‌MVP‌ ‌MVVM‌ ‌MVI‌ ‌学习…...