Noções Básicas de Structs
9 exemplos para você começar com structs - 6 básicos e 3 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com structs - 6 básicos e 3 intermediários.
struct User {
id: u64,
active: bool,
}
fn main() {
let u = User { id: 1, active: true };
println!("{} {}", u.id, u.active);
}u.idRelacionado: Métodos e Funções Associadas
struct Point { x: i32, y: i32 }
fn main() {
let x = 3;
let y = 4;
let p = Point { x, y };
println!("({}, {})", p.x, p.y);
}Point { x, y } expande para Point { x: x, y: y }struct Meters(f64);
fn main() {
let d = Meters(10.0);
println!("{}", d.0);
}.0, .1, ...f64 puro, apesar da mesma representaçãostruct Marker;
fn main() {
let _m = Marker;
}PhantomData é frequentemente preferido para marcadores genéricosstruct Config { host: String, port: u16 }
fn main() {
let base = Config { host: "localhost".into(), port: 8080 };
let alt = Config { port: 3000, ..base };
println!("{}:{}", alt.host, alt.port);
}..base copia os campos restantes de basebase é movido campo a campo para alt para campos não especificadoshost, base.host é inválidostruct Counter { value: u32 }
fn main() {
let mut c = Counter { value: 0 };
c.value += 1;
println!("{}", c.value);
}mut na ligação permite a mutação de camposmut na definição da structCell/RefCell para handles compartilhadosstruct Excerpt<'a> {
text: &'a str,
}
fn main() {
let article = String::from("Hello");
let e = Excerpt { text: &article };
println!("{}", e.text);
}Excerpt não pode sobreviver a articleString possuído não precisaria de 'a#[derive(Debug)]#[derive(Debug)]
struct Event { kind: u32, ts: u64 }
fn main() {
println!("{:?}", Event { kind: 1, ts: 99 });
}derive implementam automaticamente traits comunsDebug habilita a impressão com {:?}Display requer implementação manual)struct Pair { a: i32, b: i32 }
fn sum(Pair { a, b }: Pair) -> i32 {
a + b
}
fn main() {
println!("{}", sum(Pair { a: 2, b: 3 }));
}let e fnlet Pair { a, .. } = p ignora o restante com ..matchRelacionado: Melhores Práticas de Structs e Enums
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026