Rust所有权--与go对比学

如何拿返回值,如何不传递所有权就更改原值?如果想操作更改元变量要怎么做呢?

分别执行以下go代码:

go 复制代码
func main() {
	var a = 10
	//calc1(a)
	//a = calc_return(a)
	calc2(&a)
	a = 100
	calc3(&a)

	fmt.Println(a)
}
func calc1(num int) {
	num += num
}
func calc_return(num int) int {
	num += num
	return num
}
func calc2(num *int) {
	*num += *num
}
func calc3(num *int) {
	*num += *num
}

rust代码:

rust 复制代码
use std::string;
fn main() {
    let mut s1  = String::from("learn rust");
    s1 =  foo_return(s1);
    println!{"{s1}"};  
    
}
fn  foo_return(s:String)->String{
    println!{"{s}"};
    s
}
rust 复制代码
use std::string;
fn main() {
    let mut s1  = String::from("learn rust");
    // foo1(s1);
    // foo2(&s1);
    foo3(&mut s1);
 
    println!{"{s1}"};
    foo3(&mut s1);
    
    
}
fn  foo1(s:String){
   
     println!{"{s}"};
}
fn  foo2(s:&String){
   
     println!{"{s}"};
}
fn  foo3(s:&mut String){
    s.push_str(",you can be 666");
     println!{"{s}"};
}

自己去体会其中的不同之处

相关推荐
workflower3 小时前
时序数据获取事件
开发语言·人工智能·python·深度学习·机器学习·结对编程
CoderYanger4 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
C++业余爱好者4 小时前
Java 提供了8种基本数据类型及封装类型介绍
java·开发语言·python
林杜雨都4 小时前
Action和Func
开发语言·c#
皮卡龙4 小时前
Java常用的JSON
java·开发语言·spring boot·json
火山灿火山4 小时前
Qt常用控件(三)
开发语言·qt
利刃大大5 小时前
【JavaSE】十三、枚举类Enum && Lambda表达式 && 列表排序常见写法
java·开发语言·枚举·lambda·排序
float_六七5 小时前
Java反射:万能遥控器拆解编程
java·开发语言
han_hanker5 小时前
java 异常类——详解
java·开发语言
源码获取_wx:Fegn08955 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring