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}"};
}

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

相关推荐
_extraordinary_16 分钟前
Java SpringMVC(二) --- 响应,综合性练习
java·开发语言
@。1241 小时前
对于灰度发布(金丝雀发布)的了解
开发语言·前端
hsjkdhs2 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
Full Stack Developme2 小时前
Python Redis 教程
开发语言·redis·python
poemyang3 小时前
Goroutine间的“灵魂管道”:Channel如何实现数据同步与因果传递?
golang·并发编程
qq_4924484463 小时前
Jmeter设置负载阶梯式压测场景(详解教程)
开发语言·python·jmeter
ID_180079054734 小时前
京东获取整站实时商品详情数据|商品标题|数据分析提取教程
java·开发语言
Lazy龙4 小时前
Golang协程
golang
qiuiuiu4134 小时前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
molong9315 小时前
Kotlin 内联函数、高阶函数、扩展函数
android·开发语言·kotlin