値を別の変数に渡すと所有権が移動(ムーブ)し、元の変数は使えなくなります。これは二重解放を防ぐための仕組みです。
出るコード
let s1 = String::from("hello");
let s2 = s1; // 所有権が s2 へ移動
println!("{}", s1); // もう s1 は使えない
エラーメッセージ
error[E0382]: borrow of moved value: `s1`
直し方
両方で本体が要るなら s1.clone() で複製します。読むだけなら参照 &s1(借用)を渡します。