go语言---传值和传引用

go语言---传值和传引用

https://blog.csdn.net/cyk2396/article/details/78893828

1.定义:
b = a;
b.modify();
如果b的修改不会改变a的值,那么是传值;否则,是传引用

2.golang中大多数是传值的,有:
基本类型:byte,int,bool,string
复合类型:数组,数组切片,结构体,map,channnel
3.数组:
3.1 传值


func main() {
    var array = [3]int{0, 1, 2}
    var array2 = array
    slice2[2] = 5
    fmt.Println(array, array2)
}

输出结果:
[0 1 2] [0 1 5]
3.2.传引用的使用方法:

func main() {
    var array = [3]int{0, 1, 2}
    var array2 = &array
    array2[2] = 5
    fmt.Println(array, *array2)
}

输出结果:
[0 1 5] [0 1 5]
4.数组切片看这篇博文:
http://blog.csdn.net/cyk2396/article/details/78893420

5.struct结构体:

在函数中参数的传递可以是传值(对象的复制,需要开辟新的空间来存储该新对象)和传引用(指针的复制,和原来的指针指向同一个对象),建议使用指针,原因有两个:能够改变参数的值,避免大对象的复制操作节省内存。struct和数组的用法类似

6.map看这篇博文:

http://blog.csdn.net/cyk2396/article/details/78890185

7.channel:

channel和数组切片,map一样,传参的方式是传值,都可以直接使用,其内部维护着指向真正存储空间的指针。

原文地址:https://www.cnblogs.com/Leo_wl/p/9281208.html

时间: 2024-11-11 00:49:33

go语言---传值和传引用的相关文章

C语言-传值,传地址(指针),传引用区别和联系

很多编程老手对传值,传地址,传引用的区别搞的也不会很清楚,今天我就花一点时间再次介绍一下这些概念的本质. 其实,不用分为三类,只有两类即可.传值和传引用.为什么会出现传地址(即传指针)呢?本质就是大家一致对传值和传地址概念的理解错误导致,也是对指针的概念的理解错误导致. 指针:(简单补充一下)其实很简单,指针就是一个变量,如果非要说是一个特殊的变量也不为过,因为指针的初始化和解引用等不同的操作方式而已.就内存的分布来说,指针和一个变量在内存中存放是没有任何区别的,无非指针存放的是变量的地址,就是

Java中的传值与传引用

曾经对java中传值还是传引用的问题十分困惑,而且也被问到过许多次,无论是面试,还是平时我们平时的讨论中. 在stackoverflow上面浏览时,无意中发现了跟这个问题有关的论题,于是深入地查看了,感觉获益匪浅,于是结合自己过去的经验,写了这篇博客跟大家分享. 以前我觉得是这样的,java中的基本数据类型和String是传值的,而其它的类类型的数据则是传引用的.不过现在我觉得不是这样的. *****************************************************

【转载】Java是传值还是传引用

1. 简单类型是按值传递的 Java 方法的参数是简单类型的时候,是按值传递的 (pass by value).这一点我们可以通过一个简单的例子来说明: /* 例 1 */ /** * @(#) Test.java * @author fancy */ public class Test { public static void test(boolean test) { test = ! test; System.out.println("In test(boolean) : test = &q

Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文导图: 一.由一个提问引发的思考 在Stack Overflow 看到这样一个问题: Is Java “pass-by-reference” or “pass-by-value”? 翻译成中文: Java是传值还是传引用? 请先不要看下面的内容,思考10秒后,在继续阅读!!! 为什么建议先思考,在阅读内容呢? 我们每天可能会利用碎片化的时间阅读很多内容,有很多信息和知识其实在大脑

JavaScript系列----数据类型以及传值和传引用

1.简单数据类型 在JavaScript中简单数据类型分为5种.分别为 Undefined, Null,Boolean,Number,String. Undefined类型Undefined类型只有一个值,即特殊的undefined.在使用var对变量声明的时候,变量的值即被初始化为undefined.在使用typeof求得数据类型的时候,对于未声明的变量返回的总是undefined. Null类型Null也只有一个值得数据类型,其实质是一个指向空对象的指针.所以使用typeof操作的时候返回的

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

一个简易的便签工具:探索窗体之间传值和传引用的方法

简单的便签工具:实现了基于文本的便签信息的浏览,删除,添加.可以查看时间,实时更新数据. 这个便签工具完全基于面向对象的编程方式,首先定义Note类,然后使用NoteManager类进行便签的管理.其中的关键就是在NoteManager类中定义list<Note>泛型集合.原理上和ArrayList基本是一致的. NoteManager的工作原理: public List<Note> list;//定义一个泛型集合,并在构造函数中初始化. private int CurrentIn

Python 中函数传参是传值还是传引用

直接简单的例子: 1 from ctypes import * 2 import os.path 3 import sys 4 5 def test(c): 6 print "test before " 7 print id(c) 8 c+=2 9 print "test after +" 10 print id(c) 11 return c 12 13 def printIt(t): 14 for i in range(len(t)): 15 print t[i]

Java传值与传引用

在Java中,变量分为以下两类, 1.对于基本类型变量,Java是传值的副本,即时自己的副本变了,自己也不会变化. 2.对于一切对象型变量,Java都是传引用的副本,也就是复制指向地址的指针,它传的引用副本指向自己的地址. eg:你要张三(张三相当于函数)打开仓库,并检查库里面的货物(仓库相当于地址),有必要新建一座仓库(并放入相同的货物)给张三吗? 没有必要,你只需要把钥匙(引用)复制一把给张三即可, 张三会拿复制的钥匙(引用副本,但是有时效性,函数结束,钥匙销毁)打开仓库. 注意:Strin