【Rust学习】12. 项目实战-搜索关键词

Rust后端开发的项目实战案例 利用 Actix-web 框架构建一个 RESTful API 服务,用于管理图书信息,包括图书的添加、查询、更新和删除功能。- API 设计:遵循 RESTful 架构原则,设计清晰的 API 接口,包括正确的 HTTP 方法、状态码和响应格式。- 文章管理:实现文章的创建、编辑、删除和查询功能。- 使用 Rust 和 Diesel 库构建一个博客平台的后端服务,包括文章管理、用户管理、评论管理等功能。- 数据库设计:设计合理的数据库结构,包括文章表、用户表、评论表等,以及它们之间的关系。 阅读详情

参考:https://www.bilibili.com/video/BV1hp4y1k7SV
模仿grep写一个小项目

12.1 接受命令行参数

  1. 创建项目
cargo new minigrep
  1. 要在终端输入接受命令行参数,希望用户有如下输入
cargo run XXX XXXXX.txt
use std::env;
fn main() {
   
   
    let args:Vec<String>=env::args().collect();
    println!("{:?}",args);
}

输出

cargo run 
["target\\debug\\minigrep.exe"]
$ cargo run hello myfile.txt
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target\debug\minigrep.exe hello myfile.txt`
["target\\debug\\minigrep.exe", "hello", "myfile.txt"]

但是env::args0无法处理非法字符,会发生恐慌
TODO: 可以考虑用env::args_os()来解决,此处暂不考虑

  1. 接受两个参数并保存
use std::env;
fn main() {
   
   
    let args:Vec<String>=env::args().collect();
    println!("{:?}",args);
    let query =&args[1];
    let filename=&args[2];
    println!("Search for '{}'",query);
    println!("In file {}",filename);
}
$ cargo run hello myfile.txt
   Compiling minigrep v0.1.0 (D:\Workplace\Rust\study\minigrep)
    Finished dev [unoptimized + debuginfo] target(s) in 0.14s
     Running `target\debug\minigrep.exe hello myfile.txt`
["target\\debug\\minigrep.exe", "hello", "myfile.txt"]
Search for 'hello'
In file myfile.txt

12.2 读取文件

use std::env;
use std::fs;//处理和文件相关的任务
fn main() {
   
   
    let args:Vec<String>=env::args().collect();
    let query =&args[1];
    let filename=&args[2];

    println!("Search for '{}'",query);
    println!("In file {}",filename);

    let contents=fs::read_to_string(filename)
    .expect("Someing went wrong reading the file");

    println!("With text:\n{}",contents);
}

$ cargo run abc story.txt
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target\debug\minigrep.exe abc story.txt`
Search for 'abc'
In file story.txt
With text:
Working from home has become increasingly common, but it can be a challenge to stay productive in this environment.
To maintain focus, it is important to establish a designated workspace that is free of distractions.
It is also helpful to set specific work hours and take regular breaks throughout the day to stay energized.
Minimizing distractions such as social media notifications or TV shows can help increase productivity.
Finally, staying connected with colleagues through video conferencing tools can prevent feelings of isolation.
By implementing these tips, individuals can stay productive while working from home and maintain a healthy work-life balance.

12.3 重构:改进模块

存在问题:

  • 主函数负责的任务太多了
  • 程序代码最好一个函数负责一个功能
  • 字段太多太杂难以管理–创建struct管理
  • 错误打印的信息不清晰错误处理不好,难以维护,放置一处处理好

二进制程序关注点分离的指导性原则

  • 将程序拆分为 main.rs 和 librs,将业务逻辑放入 lib.rs
  • 当命令行解析逻辑较少时,将它放在main.rs也ok
  • 当命令行解析逻辑变复杂时,需要将它从 main.rs 提取到lib.rs
    main负责运行
    lib负责处理业务逻辑

经过上述拆分,留在 main 的功能有:

  • 使用参数值调用命令行解析逻辑
  • 进行其它配置
  • 调用lib.rs中的run函数
  • 处理run函数可能出现的错误
fn main() {
   
   
    let args:Vec<String>=env::args().collect();
    
    let (query,filename)=parse_config(&args);
...
}
fn parse_config(args:&[String])->(&str,&str){
   
   
    let query=&args[1];
    let filename=&args[2];
    (query,filename)
}

但是两个配置参数放在一个元组里,没有关联
-----放在一个struct里面

use std::env;
use std::fs;//处理和文件相关的任务
fn main() {
   
   
    let args:Vec<String>=env::args().collect();

    let config=parse_config(&args);
    let contents=fs::read_to_string(config.filename)
    .expect("Someing went wrong reading the file");

    println!("With text:\n{}",contents);
}
struct Config{
   
   
    query:String,
    filename:String,
}
fn parse_config(args:&[String])->Config{
   
   
    let query=args[1].clone();
    let filename=args[2].clone();
    Config {
   
    query, filename }
}

clone虽然低效,但是简洁性强
把函数和config相关联

use std::env;
use std::fs;//处理和文件相关的任务
fn main() {
   
   
    let args:Vec<String>=env::args().collect();

    let config=Config::new(&args);
    let contents=fs::read_to_string(config.filename)
    .expect("Someing went wrong reading the file");

    println!("With text:\n{}",contents);
}
struct Config{
   
   
    query:String,
    filename:String,
}
impl Config{
   
   
    fn new (args:&[String])->Config{
   
   
        let query=args[1].clone();
        let filename=args[2]
Rust与AI交叉项目实战指南:GitHub高星项目筛选与落地 Rust 与 AI 的融合正成为边缘智能、本地大模型和高性能系统开发的关键技术路径。其核心原理在于 Rust 的内存安全与零成本抽象,结合 AI 推理的低延迟、高确定性需求,形成独特的工程优势。这一组合显著提升端侧部署可靠性、WASM 前端兼容性及嵌入式资源利用率,广泛应用于语音识别(如 ESP32-Rust)、专利语义检索、LLM 轻量推理等场景。面对 GitHub 上海量但信息碎片化的开源项目,开发者亟需一套兼顾可信度、可运行性与教学价值的筛选方法——本文基于三年持续实践,系统拆解 Rust+AI 高星 阅读详情

相关推荐

Rust搜索服务器、rust快速找服教程

Rust盒子推出服务器搜索功能,依靠大数据检索,帮国内玩家检索Rust官服、模组、和社区类服务器,并对服务器信息进行汉化处理,大大降低了国人找服务器的门槛,节约了游戏时间...

Rust盒子提供Rust腐蚀热门教程,实用工具等。 1万+

Rust手机端皮肤搜索、生成Rust专属名片、转盘概率模拟

Rust盒子迎来了新功能更新,本次更新重点为Rust皮肤搜索预览功能,其次在4月期间陆续上线了转盘概率模拟、转盘排行榜、新成就列表、个人中心、Rust专属名片功能等..

Rust盒子提供Rust腐蚀热门教程,实用工具等。 1695

Rust 极速代码搜索引擎 Fizzy:告别 grep,实现毫秒级代码定位

在大型软件项目中,代码搜索是影响开发效率的关键环节。传统基于流式扫描的工具(如 grep)在重复搜索时面临显著的磁盘 I/O 和计算开销,导致响应延迟。为解决此痛点,现代代码搜索工具引入了预构建索引的核心原理,通过将代码符号(如函数、类名)提前提取并存入高效的内存数据结构,将搜索时的磁盘访问转换为内存查询,从而实现质的性能飞跃。这项技术的核心价值在于彻底消除了开发者在庞大代码库中导航的认知负担和等待时间,尤其适用于微服务架构、单体仓库维护等需要频繁进行代码探索和审计的场景。本文介绍的 fizzy 项目,正是

weixin_30466039的博客 808

Vibe Coding学习法:从项目实战到技能体系化的高效编程学习框架

在编程学习领域,项目驱动学习是一种高效掌握技术栈的核心方法论。其原理在于通过构建完整项目,将零散的语法、API和概念串联到具体应用场景中,实现从理论到实践的快速转化。这种学习方式的技术价值在于能够帮助开发者建立可迁移的工程思维,避免碎片化知识积累,显著提升学习转化率。在应用场景上,特别适合技术转行、技能提升和快速上手新框架的需求。本文以当前流行的Vibe Coding学习理念为例,系统拆解了如何通过环境准备、项目启动、功能验证和效率监控等步骤,构建一套可执行、可反馈的个人学习系统,其中重点涵盖了全栈Web开

weixin_33675507的博客 399

AI搜索如何重写规则:从关键词匹配到语义理解

搜索技术正经历从‘字符串匹配’到‘意图理解’的范式跃迁。传统倒排索引与查询理解依赖词频统计和预设规则,难以应对复合意图与隐含需求;而基于向量嵌入、重排序与生成式回答的AI搜索系统,通过语义相似性计算、上下文感知推理和结构化答案生成,实现‘交付答案’而非‘返回链接’。其技术价值在于提升信息获取效率、增强知识服务精准度,并重构内容可见性逻辑。典型应用场景覆盖电商SEO优化、企业知识管理、智能NAS相册检索等。本文聚焦嵌入模型选型、文档切片策略与RAG可信生成等核心实操环节,揭示AI搜索落地的关键路径。

weixin_30482383的博客 387

开源团队知识库Memento:基于Rust与向量搜索的智能信息聚合平台

在团队协作与知识管理领域,信息孤岛是普遍痛点。传统基于关键词的搜索难以应对散落在不同工具中的非结构化信息。现代解决方案通过语义理解技术,将文本转化为高维向量,利用向量数据库实现基于意图的相似性搜索,从而提升信息检索的准确性和效率。这种技术能有效连接代码仓库、即时通讯、文档协作等多源数据,构建统一的智能索引。其核心价值在于不迁移数据的前提下,为团队提供强大的上下文追溯与知识发现能力,尤其适用于新人快速融入、复杂问题根因分析等工程实践场景。本文探讨的开源自托管项目Memento,正是基于Rust高性能后端与Qd

weixin_30245867的博客 265

基于Rust构建本地维基百科搜索引擎:deepwiki-rs实战指南

全文搜索引擎是现代信息检索的核心技术,通过倒排索引实现海量文本的快速查询。其原理是将文档内容分词后建立词项到文档的映射关系,当用户输入查询词时能毫秒级返回相关结果。这项技术的工程价值在于将非结构化文本转化为可高效检索的结构化数据,广泛应用于知识库系统、企业搜索和数据分析场景。在自然语言处理领域,高质量的语料库是模型训练和评估的基础,而维基百科作为开放领域知识的重要来源,其结构化数据为NLP任务提供了丰富素材。本文通过开源工具deepwiki-rs,演示如何将维基百科数据转储文件经过ETL流程处理,利用Rus

weixin_30706691的博客 334

Twitter高级搜索实战指南:从基础算符到信息流构建

信息检索是高效获取和处理数据的基础能力,其核心原理在于通过结构化查询语言或特定算符,从海量非结构化数据中精准过滤出目标信息。在社交媒体和开源情报(OSINT)领域,这种能力尤为重要,它直接决定了市场分析、趋势预测和安全研究的效率与深度。Twitter作为实时性极强的公开数据平台,其搜索功能本质是一个基于时间和互动量的实时过滤引擎。掌握其高级搜索算符,如使用“精确短语”匹配提升相关性,利用“-”排除噪音词汇,或组合“filter:links”筛选深度内容,能极大提升信息获取的精准度。将这些技巧从单次查询升级为

weixin_30471561的博客 605

Meilisearch实战:比Elasticsearch快5倍的轻量级全文搜索方案

全文搜索引擎是现代应用的核心基础设施,其核心能力涵盖倒排索引构建、分词处理、相关性排序与低延迟查询响应。基于Rust实现的Meilisearch通过内存映射(mmap)、WAL日志和内置中文n-gram分词等关键技术,在中小规模数据场景下显著降低查询延迟与资源开销。相比Elasticsearch的JVM GC、段合并与复杂配置,它提供单二进制部署、毫秒级P99响应及开箱即用的中文支持,特别适用于独立开发者、SaaS后台与IoT设备管理等对启动速度、内存占用和运维简洁性敏感的场景。

weixin_31421613的博客 299

用Rust构建个人Agent操作系统:从架构设计到实战开发

在人工智能技术快速发展的今天,AI Agent已成为提升个人效率与自动化工作流的关键技术。其核心原理在于通过智能体模拟人类决策过程,自主调用工具与处理任务。这一技术的核心价值在于将AI从单一工具升级为可协同工作的智能环境,从而在个人日程管理、智能办公、自动化流程等场景中实现深度集成与自动化。当前,基于Rust语言构建的Agent操作系统正成为技术热点,它通过内存安全、无畏并发等特性为多Agent协同提供了可靠基础架构。本文聚焦于如何设计并实现一个可管理数字资源、协调多个AI Agent协同工作的操作系统级平

weixin_30603633的博客 324

Rust 实战 (2)|创建一个完整的项目

Rust 设计并创建一个完整的项目工作空间和项目两层结构设计一个实际的项目完成创建并编译Hello world小结 上一节,我们对 Rust 的开发环境的关键概念做了介绍,本节我们来创建一个完整的项目,理解 Rust 的项目结构,并建立一个 Rust 实战用的 git 仓库。 工作空间和项目两层结构 使用过 Visual C++/Visual Studio/… 等 C/C++ IDE 的开发者应该都有解决方案/子项目 的工程概念。例如 Visual Studio 创建的 C++ 工程,都会有一个 *.sln

正交分解 3911

Rust语言项目实战(四) - 界面绘制与渲染

Escq目前游戏的界面还是一片空白,本章我们开始为游戏在终端上绘制并渲染界面,这真是一个激动人心的工作。

因吹斯汀 1329

tantivy 用Rust开发搜索引擎

搜索引擎(search engine)是互联网技术中最重要的组成部分之一,它用于收集、整理、索引和存储海量数据。它的主要功能是快速地对海量文档进行检索、排序和过滤,为用户提供良好的检索体验。目前,搜索引擎已成为网络生活的一部分,如谷歌、百度、bing、yahoo等。搜索引擎可以帮助用户快速找到需要的信息,并减少时间和精力的浪费。搜索引擎通过提升检索效率和相关性,大幅提高了互联网服务的质量。

AI天才研究院 3164

Rust与后端开发的性能调优秘籍

在当今的后端开发领域,性能是一个至关重要的指标。随着互联网业务的不断发展,对后端服务的响应速度、吞吐量等性能要求越来越高。Rust作为一种系统级编程语言,以其出色的性能、内存安全性和并发处理能力,逐渐在后端开发中崭露头角。本文的目的是深入探讨在后端开发中使用Rust进行性能调优的方法和技巧,范围涵盖了Rust的核心概念、算法原理、实际项目应用以及相关工具和资源的推荐等方面。本文将按照以下结构进行组织:首先介绍Rust在后端开发中的背景知识,包括目的、预期读者和文档结构。

架构师的AI之路,分享AI应用开发架构的学习与实践。 750

racer用Rust开发自动补全工具

racer 是用 Rust 语言编写的一个自动补全工具。它基于上下文推断、语义分析、符号表等能力,通过对代码进行编译并解析其语法树,来提供代码补全建议。使用 Rust 开发自动补全工具一直都是一个很热的话题。像 PyCharm、VS Code 之类的编辑器中都提供了对 Rust 的支持,但一般来说,它们都是在运行时完成自动补全的功能,这样对于一些复杂的代码库来说,效率非常低下。

AI天才研究院 2977

用Pixel5玩转AOSP:从零开始定制Android13系统(含GMS集成方案)

本文提供了一份详尽的Pixel 5 AOSP定制指南,涵盖从环境搭建、源码下载、系统编译到刷机的完整流程。重点解决了原生AOSP缺失Google移动服务(GMS)的难题,分享了从官方镜像提取并集成GMS组件的实战方案,助你打造独一无二的Android 13系统。

sam99的博客 527

自动化测试-自愈技术

随着人工智能的发展,作为一名软件测试工程师,相信大家都会思考如何把这一前沿技术引入到我们的自动化测试当中,想一万遍不如做一遍。,传递当前页面状态,获取之前成功的定位器路径,比较它们,并生成修复的定位器列表。如果修复成功,我们可以使用 Healenium Idea 插件更新我们的自动化测试代码:插件使用修复定位器寻找修复和更新测试代码。的旧定位器去定位按钮的时候,脚本就会报错,提示 “NoSuchElement”的错误异常。现在,我们假设开发人员变更了应用程序的UI界面,改变了这个按钮的id属性,从。

qq_58223744的博客 2661

Android WIFI体系:深入解析WifiLock与MulticastLock的底层实现与性能优化

本文深入解析Android WIFI体系中WifiLock与MulticastLock的底层实现机制与性能优化策略。WifiLock通过阻止Wi-Fi休眠提升网络性能,尤其WIFI_MODE_FULL_HIGH_PERF模式可显著降低延迟;MulticastLock则控制组播数据接收,但会增加功耗。文章详细探讨了其与wpa_supplicant、HAL层的交互,并提供高性能场景下的优化实践与功耗平衡方案。

php55的博客 1079

单光子雪崩二极管(SPAD):原理、极高增益机制与微光探测解析

本文系统阐述了单光子雪崩二极管(SPAD)的工作原理及其在弱光探测中的应用。SPAD通过工作在盖革模式下的碰撞离化效应实现单光子探测,其核心机理包括:1)采用p+-n-n+结构实现高电场分布;2)通过雪崩倍增过程获得10^6量级增益;3)采用主动/被动淬灭机制实现快速恢复。文章详细分析了SPAD的关键性能参数(如光子探测效率、暗计数率等)及其在量子通信、激光雷达等领域的应用优势,揭示了该器件在极微弱光信号探测中的独特价值。

Fun_LiDAR的博客 1044

Win11更新导致TIA博途许可证出现问题的解决办法汇总

Win11更新导致TIA博途许可证出现问题的解决办法汇总

Robot_PLC_HMI_Automation 9896

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 7万+

python基础之语言发展历史

博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。 目录一、前言二、发展历史1、Python是一种面向对象的解释型编程语言2、Python常被称为胶水语言3、Python由Guido开发4、Python连续多年入选编程语言TOP105、Python的发展历史三、总结 一、前言   由于Python语言的简洁性、易读性以及可扩展性,它在网络爬虫、数据分析、.

jiankang66的博客 3348

二、Windows安装Docker到非C盘的全新教程(Windows版)

Windows安装Docker到非C盘的全新教程(Windows版)

funfan的博客 4万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 【Rust学习】7 Package和Crate定义module,
下一篇: Git的基本操作
吃饱了好睡觉耶1
博客等级 码龄7年 0粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值