struct Animate { name: String } impl Animate { fn get_name(&self) -> String { return self.name; } } let animate = Animate { name: String::from("dog") }; println!("{}", animate.get_name()); 如果运行上面的程序,会报错误 cannot move out of `self.name` which is behind a shared reference 修复的方法可以是 fn get_name(&self) -> &String { return &self.name; } 或者是 fn get_name(&self) -> String { return self.name.clone(); } 这个问题应该是和 rust 所有权有关,当方法返回时会出现所有权移动。一开始认为可能是结构体内的字段无法移动所有权。但是执行 let a_name = animate.name; // println!("{}", animate.name) 报错了 // println!("{}", a_name) 没有问题 报错的原因应该是所有权移动后, animate.name 就失效了,按这么说结构体内的字段是可以移动所有权的。 那最上面的报错应该怎么比较好去理解?