🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍


img

Rust 中的结构体(Struct)是一种用于自定义数据类型的基础工具,它允许你将多个相关的值组合在一起,形成一个有意义的整体,从而增强代码的可读性、可维护性和类型安全。

下面是一个快速了解 Rust 结构体主要特性的表格:

特性分类

说明

示例或形式

​结构体类型​

具名结构体 (最常用)

struct User { username: String, email: String }

元组结构体

struct Color(i32, i32, i32);let black = Color(0, 0, 0);访问字段:black.0

单元结构体

struct Marker;let marker = Marker;常用于实现 trait 或作为标记类型。

​实例化与访问​

实例化

let user = User { email: String::from("a@b.com"), username: String::from("abc") };

访问字段

println!("{}", user.email);

可变性

默认不可变。需整体可变:let mut user = User {...};user.email = String::from("new@b.com");

字段初始化简写

变量名与字段名相同时可简写:fn build_user(email: String, username: String) -> User { User { email, username, ... } }

结构体更新语法

let user2 = User { email: String::from("another@ex.com"), ..user1 };注意所有权问题。

​方法​

实例方法 (使用 &self, &mut self, self)

fn area(&self) -> u32 { self.width * self.height }rect.area();

关联函数 (类似静态方法)

fn square(size: u32) -> Self { Self { width: size, height: size } }let sq = Rectangle::square(3);

多个 impl

允许为同一结构体定义多个 impl块以组织代码。

​高级特性​

泛型结构体

struct Point<T> { x: T, y: T }impl<T> Point<T> { fn x(&self) -> &T { &self.x } }

生命周期注解

struct ImportantExcerpt<'a> { part: &'a str }

​常用 Trait​

#[derive(Debug)]

用于打印调试信息:println!("{:?}", rect);

#[derive(Clone)]

允许显式创建值的副本。

🧱 ​​结构体类型​

Rust 支持三种结构体:

  1. ​具名结构体 (Named Struct)​​:最常见,字段有明确名称。

  2. ​元组结构体 (Tuple Struct)​​:字段没有名称,通过索引访问,常用于封装不同类型或赋予元组更明确的类型含义。

  3. ​单元结构体 (Unit-like Struct)​​:不含任何字段,常用于在特定类型上实现 trait 或作为标记类型。

🛠️ ​​实例化、访问与可变性​

  • ​实例化​​:使用 let var_name = StructName { field1: value1, field2: value2, ... };语法创建结构体实例。

  • ​访问字段​​:通过点号 .访问。

  • ​可变性​​:结构体可变性是​​整体的​​。使用 mut关键字声明可变实例后,​​所有字段​​都可变。

  • ​字段初始化简写​​:当变量名与字段名相同时,可简写。

  • ​结构体更新语法 (..)​​:基于已有实例创建新实例时非常方便,但需注意​​所有权​​问题(例如 String等未实现 Copytrait 的类型会被移动)。

⚙️ ​​方法与关联函数​

使用 impl块为结构体定义方法:

  • ​实例方法​​:第一个参数为 self(常用 &self只读访问,&mut self修改数据,self获取所有权)。

  • ​关联函数​​:不以 self为参数,常用于构造函数(如 new),通过 StructName::function_name()调用。

  • 一个结构体可以有多个 impl块。

🚀 ​​高级特性与概念​

  • ​泛型结构体​​:提高代码复用性,可对泛型参数进行约束。

  • ​生命周期注解​​:当结构体包含引用时,必须使用生命周期注解确保引用的有效性。

  • ​内存布局​​:Rust 编译器会自动优化结构体字段排列以减少内存占用。

🔧 ​​常用 Trait​

可通过 #[derive(...)]属性自动为结构体派生一些常用 trait:

  • Debug: 方便打印调试信息。

  • Clone: 允许显式创建值的副本。

    (其他常用 trait 如 Copy, Eq, PartialEq, Hash等也可按需派生。)

💡 ​​应用场景​

结构体广泛应用于:

  • ​数据封装与组织​

  • ​类型安全与抽象​​(如用不同结构体包装相同基础类型以避免混淆)

  • ​代码复用与扩展​

  • ​实现面向对象的设计模式​

希望这些信息能帮助你快速上手 Rust 结构体。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐