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

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

相关推荐
微学AI8 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
豆瓣鸡8 小时前
算法日记 - Day3
java·开发语言·算法
Achou.Wang9 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
韭菜炒鸡肝天9 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
Aaron - Wistron10 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
Dxy123931021611 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
05664611 小时前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄11 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰11 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
昆曲之源_娄江河畔11 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql