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

龙井建设局网站网站建设属于技术开发合同吗

龙井建设局网站,网站建设属于技术开发合同吗,网站建设 服饰鞋帽,厦门seo关键词优化🦀 Rust 配置解析:彻底搞懂 TOML、Option、Vec、derive 背后的原理 📌 目录 什么是 TOML 文件?为什么要用 serde toml crate?结构体上 #[derive(...)] 是什么?配置中数组 [] 和表数组 [[...]] 怎么用&…

🦀 Rust 配置解析:彻底搞懂 TOML、Option、Vec、derive 背后的原理


📌 目录

  1. 什么是 TOML 文件?
  2. 为什么要用 serde + toml crate?
  3. 结构体上 #[derive(...)] 是什么?
  4. 配置中数组 [] 和表数组 [[...]] 怎么用?
  5. 什么是可选字段?Option<T> 如何工作?
  6. 实战演练:读取配置并映射为 Rust 数据结构
  7. 总结

1️⃣ 什么是 TOML 文件?

TOML 是一种类似 ini 的配置文件格式,语法简单,适合人类阅读,常见于 Rust 工程的 Cargo.toml

一个典型的 TOML 文件:

name = "MyApp"
version = "1.0.0"
tags = ["rust", "serde", "toml"][[servers]]
name = "server1"
ip = "192.168.1.1"
port = 8080[[servers]]
name = "server2"
ip = "192.168.1.2"
port = 8081

2️⃣ 为什么要用 serde + toml crate?

Rust 不内置解析配置文件的功能,所以我们使用两个库:

库名用途
serde通用序列化框架,能把 TOML 转换为 Rust 结构体
toml专门解析 TOML 的 crate,和 serde 搭配使用

📦 在你的 Cargo.toml 中添加依赖:

[dependencies]
serde = { version = "1.0", features = ["derive"] }
toml = "0.8"

3️⃣ #[derive(...)] 是什么?

在 Rust 中,你必须显式声明哪些功能你要让结构体拥有,比如:

#[derive(Debug, Deserialize)]
  • Debug:允许你打印结构体内容,调试用。
  • Deserialize:告诉 serde 可以把 TOML 字符串自动转换为这个结构体。

📌 如果你不加 Deserialize,你就不能用 toml::from_str() 来自动解析配置,会编译报错!


4️⃣ TOML 中的数组 [] 和表数组 [[...]] 怎么用?

➤ 普通数组

tags = ["rust", "serde", "toml"]

对应 Rust:

tags: Vec<String>,

➤ 表数组(数组中的结构体)

[[servers]]
name = "server1"
ip = "192.168.1.1"
port = 8080[[servers]]
name = "server2"
ip = "192.168.1.2"
port = 8081

对应 Rust:

servers: Vec<Server>,

其中 Server 是一个结构体类型。


5️⃣ 什么是 Option?为什么它代表“可选字段”?

如果你有字段在某些配置文件中可能会省略,比如 version

# version = "1.0.0"  // 这行没写

你就不能定义为 version: String,否则会报错。

✅ 正确写法是:

version: Option<String>,
  • 有值时解析为 Some("1.0.0")
  • 没值时解析为 None

这样你的配置就可以“少写字段”而不影响程序运行。


6️⃣ 实战:用 Rust 加载 TOML 配置文件

配置文件 config.toml

name = "MyApp"
tags = ["rust", "serde", "toml"][[servers]]
name = "server1"
ip = "192.168.1.1"
port = 8080[[servers]]
name = "server2"
ip = "192.168.1.2"
port = 8081

Rust 代码

use serde::Deserialize;
use std::fs;#[derive(Debug, Deserialize)]
struct Config {name: String,version: Option<String>,     // 可选字段tags: Vec<String>,           // 数组servers: Vec<Server>,        // 表数组
}#[derive(Debug, Deserialize)]
struct Server {name: String,ip: String,port: u16,
}fn main() {let content = fs::read_to_string("config.toml").expect("无法读取文件");let config: Config = toml::from_str(&content).expect("TOML 解析失败");println!("{:#?}", config);// 示例用法if let Some(version) = &config.version {println!("版本号: {}", version);} else {println!("未指定版本号");}for server in &config.servers {println!("服务器: {} -> {}:{}", server.name, server.ip, server.port);}
}

🧪 输出结果示例

Config {name: "MyApp",version: None,tags: ["rust","serde","toml",],servers: [Server {name: "server1",ip: "192.168.1.1",port: 8080,},Server {name: "server2",ip: "192.168.1.2",port: 8081,},],
}

7️⃣ 总结一张图:结构体 vs TOML 映射关系

Rust 字段类型TOML 写法是否可省略说明
Stringname = "MyApp"❌ 否不能省略,否则报错
Option<String>version = "1.0.0"✅ 是省略时为 None
Vec<String>tags = ["a", "b"]❌ 否普通数组
Vec<Struct>[[servers]] ...❌ 否表数组(嵌套结构)


📚 延伸阅读

  • serde 官方文档
  • toml crate 文档
  • Rust 类型系统介绍(Option 和 Result)
http://www.dtcms.com/wzjs/802596.html

相关文章:

  • 网站开发语言学习C 吗公司商城网站开发费做什么科目
  • 亚成成品网站源码南海佛山网站建设
  • 郑州网站建设与设计wordpress 亩
  • 网站注册实名制怎么做做网站找
  • 设计素材网站那个好wordpress如何添加表格
  • 深圳市公司网站建设企业俄语好网站设计
  • 惠民网站建设网站的流量检测怎么做
  • 搜索引擎网站优化和推广方案wordpress music pro
  • 优惠券网站怎么做的网页设计与制作怎么做清平调代码
  • 学校联网网站建设什么是网络建站
  • 电子商务网站建设花费网站商城建设
  • 企业网站经典案例人才市场招聘网站
  • 网站维护 案例环球设计网
  • 视频素材网站推荐建筑设计网上接单
  • 电子商务网站建设的一般曲靖模板网站建设
  • 网站设计实施陕西咸阳建设银行网站
  • 珠海网站建设公电商网站的建设背景
  • 装修公司谁做网站wordpress网站生成app应用
  • 设计师常用的图片网站wordpress主题二级菜单栏
  • 徐州沛县网站建设东莞工厂
  • 免费建设手机网站小型IT网站开发公司
  • 网站建设pc端青岛做教育的网站建设
  • 深圳网站建设收费标准网站备案费用多少
  • 大连鼎信网站建设江西网站开发企业
  • 免费的app软件下载网站展览馆网站建设方案书
  • 做旅游游客产品的网站公司网站维护和更新属于哪个部门
  • 什么是可信网站手机自己免费制作app软件
  • 浙江龙元建设集团 网站湖南网站服务
  • 丰城住房和城乡建设部网站潍坊360做网站怎么样
  • python整合网站开发技术网站制作什么品牌好