Rust 语言入门(一):打印与格式化输出
对于初学者来说,掌握 Rust 的基本 I/O 操作是入门的第一步。本篇博客将介绍 Rust 语言的打印机制,包括基本的 print!、println! 宏,格式化输出方式,并探讨其底层原理。
Rust 的基本打印
在 Rust 中,最常见的输出方式是使用 println! 和 print! 宏。
fn main() {println!("Hello, world!");
}
println! 和 print!
println!:带换行符的输出,相当于 C 语言的printf("...\n");print!:不带换行符,需要手动添加\n
示例:
fn main() {print!("Hello, ");println!("world!");
}
输出:
Hello, world!
格式化输出
Rust 提供了强大的格式化输出功能,通过 {} 占位符实现。常见的格式化方式有:
1. 基本格式化

fn main() {let name = "Rust";let version = 1.73;println!("{} is a systems programming language. Version: {}", name, version);
}
输出:
Rust is a systems programming language. Version: 1.73
2. 位置参数

fn main() {println!("{1} is better than {0}!", "C", "Rust");
}
输出:
Rust is better than C!
3. 具名参数
fn main() {println!("{language} is fun!", language="Rust");
}
输出:
Rust is fun!
4. 指定格式
Rust 支持各种格式控制,如二进制、十六进制、科学计数法等。
fn main() {let num = 42;println!("Binary: {:b}, Hex: {:x}, Octal: {:o}", num, num, num);
}
输出:
Binary: 101010, Hex: 2a, Octal: 52
5. 指定宽度和对齐
- 右对齐(默认):
println!("{:>10}", "Rust");
输出:
Rust
- 左对齐:
println!("{:<10}", "Rust");
输出:
Rust
- 填充字符:
println!("{:*>10}", "Rust");
输出:
******Rust
6. 浮点数格式化
fn main() {let pi = 3.1415926;println!("Pi to 2 decimal places: {:.2}", pi);
}
输出:
Pi to 2 decimal places: 3.14
Debug 格式化输出
Rust 提供 {:?} 进行 Debug 格式输出,适用于调试。
fn main() {let tuple = (1, "Rust", 3.14);println!("{:?}", tuple);
}
输出:
(1, "Rust", 3.14)
对于复杂数据结构,可以使用 {:#?} 进行美化输出。
fn main() {let numbers = vec![1, 2, 3, 4, 5];println!("{:#?}", numbers);
}
输出:
[1,2,3,4,5,
]
Display vs Debug
如果一个结构体希望支持 println!,需要实现 Display 或 Debug。
Debug 仅适用于调试
#[derive(Debug)]
struct Person {name: String,age: u8,
}fn main() {let p = Person { name: "Alice".to_string(), age: 30 };println!("{:?}", p); // 自动实现 `Debug`
}
Display 自定义格式
Display 需要手动实现:
use std::fmt;struct Person {name: String,age: u8,
}impl fmt::Display for Person {fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {write!(f, "{} is {} years old", self.name, self.age)}
}fn main() {let p = Person { name: "Alice".to_string(), age: 30 };println!("{}", p);
}
输出:
Alice is 30 years old
原理解析
Rust 的 println! 是一个宏,而非函数。这意味着:
- 编译时解析:Rust 编译器会在编译期解析
println!并展开代码,确保类型安全。 - 自动格式检查:Rust 不允许格式不匹配,比如
println!("{}", 42, 43);会编译报错。 - 零开销抽象:格式化操作会在编译时尽可能优化,保证高效性。
总结
println!和print!是 Rust 的基本输出宏。{}用于格式化输出,支持参数位置、宽度控制、进制转换等。Debug({:?})适用于调试,Display可自定义格式化。println!作为宏,提供编译时检查和高效性。
Rust 的打印与格式化机制既强大又安全,掌握这些基本概念有助于提高代码的可读性和可维护性。希望这篇文章对你有所帮助,欢迎留言交流!
相关文章:
Rust 语言入门(一):打印与格式化输出
对于初学者来说,掌握 Rust 的基本 I/O 操作是入门的第一步。本篇博客将介绍 Rust 语言的打印机制,包括基本的 print!、println! 宏,格式化输出方式,并探讨其底层原理。 Rust 的基本打印 在 Rust 中,最常见的输出方式…...
vue3.x 的 toRef详细解读
在 Vue 3.x 中,toRef 是一个用于创建响应式引用的工具函数。它可以将一个响应式对象的某个属性转换为一个独立的 ref 对象,同时保持与原始属性的响应式连接。以下是 toRef 的详细解读和示例。 1. toRef 的作用 核心功能 toRef 用于从响应式对象&#x…...
wordpress资讯类网站整站打包
wordpress程序,内置了价值499元的模板.但是有了模板没有全自动采集相信大多数人都搞不懂,目录那么多,全靠原创几乎是不可能的事情,除非你是大公司,每人控制一个板块, 这套源码里面最有价值的应该是这个采集…...
GitHub基本操作及Git简单命令
GitHub简介 GitHub就是一个远程仓库,远程仓库可以理解为就是一个可以保存自己代码的地方,在实际开发当中一个项目往往是有多个人来共同协作开发完成的,那么就需要一个统一代码保存的地方,而GitHub就是起到一个共享和汇总代码的作…...
记一次MySQL故障解决
记一次MySQL故障解决 1 故障现象2 故障排查2.1 查看MySQL服务状态2.2 查看服务日志 3 解决方法3.1 增加 wait_timeout 和 interactive_timeout 参数的值,确保连接不会因超时而被关闭:3.2 检查服务已经恢复正常,不过以上只是临时修改ÿ…...
DeepSeek-R1私有化部署教程 | Linux服务器搭建AI大语言模型
**云服务器用LinuxDockerOllamaOpenWebUI部署DeepSeek-R1大语言模型(LLMs),DeepSeek本地化部署教程(在自己电脑上部署也可以参考此教程)。**超详细教程,手把手。 在当今数字化时代,大型语言模型…...
「软件设计模式」桥接模式(Bridge Pattern)
深入解析桥接模式:解耦抽象与实现的艺术 一、模式思想:正交维度的优雅解耦 桥接模式(Bridge Pattern)通过分离抽象(Abstraction)与实现(Implementation),使二者可以独立…...
【Flink快速入门-5.流处理之多流转换算子】
流处理之多流转换算子 实验介绍 前面实验中介绍的算子已经能够满足我们的大部分开发需求了,但是在实际工作中有时候还会遇到一些业务场景,例如需要摄入多个输入流并将其合并处理,或者需要将一条输入流分割为多条子流,在不同的子…...
react传递函数与回调函数原理
为什么 React 允许直接传递函数? 回调函数核心逻辑 例子:父组件控制 Modal 的显示与隐藏 // 父组件 (ParentComponent.tsx) import React, { useState } from react; import { Modal, Button } from antd; import ModalContent from ./ModalContent;co…...
华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
1 概述 KEDA(Kubernetes-based Event-Driven Autoscaler,网址是https://keda.sh)是在 Kubernetes 中事件驱动的弹性伸缩器,功能非常强大。不仅支持根据基础的CPU和内存指标进行伸缩,还支持根据各种消息队列中的长度、…...
Spring源码分析のBean扫描流程
文章目录 前言一、scanCandidateComponents1.1 isCandidateComponent1.1.1、排除/包含过滤器1.1.2、条件装配1.1.3、重载一1.1.4、重载二1.1.5、补充:Lookup注解 总结 前言 原生的Spring在构造ApplicationContext时,会调用refresh方法。其中就包含了扫描…...
Ubuntu安装docker:docker-desktop : 依赖: docker-ce-cli 但无法安装它、无法定位软件包 docker-ce-cli
具体错误 sudo apt-get install ./docker-desktop-amd64.deb [sudo] password for weiyu: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 注意,选中 docker-desktop 而非 ./docker-desktop-amd64.de…...
基于大数据的奥运会获奖数据分析系统设计与实现
【大数据】基于大数据的奥运会获奖数据分析系统设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过集成先进的数据抓取、处理、存储与可视化技术,为深入理解奥运会…...
数据结构 堆和priority_queue
一、堆的定义 堆(heap),是⼀棵有着特殊性质的完全⼆叉树,可以⽤来实现优先级队列(priorityqueue)。 堆需要满⾜以下性质: 1. 是⼀棵完全⼆叉树; 2. 对于树中每个结点,如…...
Dockerfile 编写推荐
一、导读 本文主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法。 虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以进行版本控制,但是不正当的 Dockerfile 使用也会导致很多问题。 docker 镜像太大。如果你经常使用镜像或者…...
【抽象代数】1.2. 半群与群
群的定义 群非空集合二元运算性质 定义1. 设 为一个非空集合,上有二元运算,满足结合律,则称或为一个半群。 定义2. 设 为半群,若元素 满足 ,则称 为 的左幺元(右幺元:)&#…...
Django中实现简单易用的分页工具
如何在Django中实现简单易用的分页工具?📚 嗨,小伙伴们!今天我们来看看如何在 Django 中实现一个超简单的分页工具。无论你是在处理博客文章、产品列表,还是用户评论,当数据量一大时,分页显得尤…...
「软件设计模式」装饰者模式(Decorator)
深入解析装饰者模式:动态扩展功能的艺术(C实现) 一、模式思想与应用场景 1.1 模式定义 装饰者模式(Decorator Pattern)是一种结构型设计模式,它通过将对象放入包含行为的特殊封装对象中,动态地…...
CI/CD(二)docker-compose安装Jenkins
1、docker-compose.yml version: 3.8services:jenkins:image: jenkins/jenkins:lts # 使用官方的 Jenkins LTS 镜像container_name: jenkinsuser: root # 如果需要以 root 用户运行ports:- "8080:8080" # Jenkins Web 界面端口- "50000:50000" # 用于 Jen…...
OpenCV机器学习(1)人工神经网络 - 多层感知器类cv::ml::ANN_MLP
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::ANN_MLP 是 OpenCV 库中的一部分,用于实现人工神经网络 - 多层感知器(Artificial Neural Network - Multi-Layer…...
Docker化Ollama部署指南:开箱即用的本地大模型服务方案
1. 项目概述:一个让Ollama“上手即用”的Docker镜像如果你最近在本地折腾过大语言模型,大概率听说过Ollama。它确实是个神器,把模型下载、加载、运行和API服务这些繁琐步骤打包成了一个简单的命令行工具,让在个人电脑上跑Llama、Q…...
区域知识产权信息管理:创新监管,智慧服务
为赋能区域知识产权管理,助力区域科技创新和经济发展,“普陀区知识产权信息服务平台”上线运行。平台整合“区域实时监控统计”“知识产权信息统计”“园区知识产权代管”“企业排行榜”“专利检索”“商标检索”六大核心功能模块,覆盖政务决…...
【Docker 27跨架构构建终极指南】:27个生产级镜像构建案例,覆盖ARM64/AMD64/PPC64LE全场景,错过再等一年!
更多请点击: https://intelliparadigm.com 第一章:Docker 27跨架构构建核心机制演进 Docker 27 引入了重构后的 BuildKit 构建引擎,默认启用 --platform 多架构感知能力,彻底替代了传统 docker build --build-arg BUILDPLATFORM …...
如何构建现代化React音乐播放器:Tonzhon的架构设计与最佳实践
如何构建现代化React音乐播放器:Tonzhon的架构设计与最佳实践 【免费下载链接】tonzhon-music 铜钟 Tonzhon (tonzhon.whamon.com): 干净纯粹的音乐平台 (铜钟已不再使用 tonzhon.com,现在的 tonzhon.com 不是正版的铜钟) 项目地址: https://gitcode.c…...
构建自适应AI智能体:程序性记忆与专业化矩阵实现智能进化
1. 项目概述:构建一个会“成长”的智能体伙伴 如果你用过ChatGPT、Claude这类大模型,肯定有过这样的体验:每次对话都像第一次见面,它记不住你上次说了什么,更别提你的工作习惯和思考方式了。你就像一个永远在训练新员工…...
深度解析:如何将网页视频无缝推送到MPV播放器实现专业级观影体验
深度解析:如何将网页视频无缝推送到MPV播放器实现专业级观影体验 【免费下载链接】play-with-mpv Chrome extension that allows you to play videos in webpages like youtube with MPV instead 项目地址: https://gitcode.com/gh_mirrors/pla/play-with-mpv …...
TFT Overlay:云顶之弈玩家的智能决策助手,三分钟实现从新手到高手的蜕变
TFT Overlay:云顶之弈玩家的智能决策助手,三分钟实现从新手到高手的蜕变 【免费下载链接】TFT-Overlay Overlay for Teamfight Tactics 项目地址: https://gitcode.com/gh_mirrors/tf/TFT-Overlay 在《云顶之弈》的激烈对局中,你是否曾…...
【MCP 2026边缘部署性能优化黄金五步法】:20年一线架构师亲授,避开92%团队踩过的实时推理延迟陷阱
更多请点击: https://intelliparadigm.com 第一章:MCP 2026边缘部署性能优化的底层逻辑与范式跃迁 MCP 2026(Model Control Plane 2026)并非简单延续传统云原生调度范式,而是以“确定性时延契约”为第一性原理重构边缘…...
医疗影像数据跨院共享总出事?(MCP 2026新增“DICOM元数据级加密”强制条款深度拆解):基于国密SM4的轻量级边缘加解密实践
更多请点击: https://intelliparadigm.com 第一章:MCP 2026医疗数据安全防护方法总览 MCP 2026(Medical Confidentiality Protocol 2026)是一套面向新一代医疗信息系统的端到端数据安全框架,专为符合《中华人民共和国…...
在多地域部署中体验Taotoken的容灾与智能路由优势
在多地域部署中体验Taotoken的稳定连接能力 1. 多地域部署的典型架构 现代分布式系统常采用多地域部署架构以提高服务可用性。当业务系统分布在多个地理区域时,API调用的稳定性成为关键因素。通过Taotoken平台接入大模型服务,开发者可以简化跨地域的模…...
