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

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

相关推荐
老赵的博客1 分钟前
c++ 杂记
开发语言·c++
jimmy.hua3 分钟前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
w2sfot1 小时前
Passing Arguments as an Object in JavaScript
开发语言·javascript·ecmascript
郝学胜-神的一滴1 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
搞一搞汽车电子2 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
总有刁民想爱朕ha2 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
ifanatic2 小时前
[每周一更]-(第159期):Go 工程师视角:容器化技术(Docker/Kubernetes)与CI/CD流程的应用场景
docker·golang·kubernetes
小菜全3 小时前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架
人衣aoa3 小时前
Python编程基础(八) | 类
开发语言·python
晚云与城3 小时前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++