You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中定义并输出包含姓与名的结构体?

Rust实现Go语言Person结构体打印的正确方式

你给出的Go代码实现了定义含姓名字段的person结构体、实例化后直接打印的功能,但你写的Rust代码存在关键语法和逻辑错误,导致编译失败。

错误原因分析

  • impl块位置错误:Rust的impl块不能放在函数(比如main)内部,必须置于全局作用域中。
  • Display trait实现逻辑错误:实现fmt::Display trait时,必须实现它强制要求的fmt方法,你混淆了结构体实例化语法与trait实现逻辑,错误地在impl块里写字段初始化代码。

正确实现方式

方式一:手动实现fmt::Display trait(自定义打印格式)

这种方式可以精准控制输出格式,和Go的默认打印风格对齐:

use std::fmt;

struct Person {
    first_name: String,
    last_name: String,
}

// 在全局作用域实现Display trait
impl fmt::Display for Person {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        // 匹配Go的默认结构体输出格式
        write!(f, "{{firstName: {}, lastName: {}}}", self.first_name, self.last_name)
    }
}

fn main() {
    // 实例化Person结构体
    let alex = Person {
        first_name: String::from("alex"),
        last_name: String::from("anderson"),
    };
    // 直接打印(因实现了Display trait)
    println!("{}", alex);
}

方式二:派生Debug trait(简洁快速)

如果不需要自定义格式,仅需快速打印结构体内容,派生Debug trait是更高效的选择,输出风格和Go的默认打印高度接近:

// 派生Debug trait,支持用{:?}格式打印
#[derive(Debug)]
struct Person {
    first_name: String,
    last_name: String,
}

fn main() {
    let alex = Person {
        first_name: String::from("alex"),
        last_name: String::from("anderson"),
    };
    // 打印Debug格式内容
    println!("{:?}", alex);
    // 若需要更易读的缩进格式,可使用{:#?}
    // println!("{:#?}", alex);
}

运行方式二的代码,输出示例:Person { first_name: "alex", last_name: "anderson" }

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:25:29