golang 值类型和引用类型的区别

值类型和引用类型两者之间的主要区别:拷贝操作和函数传参。
值类型在使用= 赋值的时候,是拷贝复制;
值类型在函数传参的时候,也是拷贝复制
引用类型在= 和函数传参的时候,是传递的指向值的指针或者叫引用,指针和引用有细微差别。
Java 值类型可以直接赋值,引用类型需要通过copy函数去拷贝,否则只能用赋值

值类型和引用类型
  • 基本数据类型 int 、float、bool、string、array、结构体 struct,都是值类型;
  • 引用类型,interface、slice、map、chan一共四种类型都是引用类型,make 的作用是初始化内置的数据结构,也就是我们在前面提到的切片、哈希表和 Channel;new 的作用是根据传入的类型分配一片内存空间并返回指向这片内存空间的指针。
  • 在内存里分成两大块,栈和堆,值类型的变量通常存储在栈区,引用类型通常存储在堆区,在golang中,但有可能值类型也存储在堆区,反过来也有可能引用类型存储在栈区。
逃逸分析
  • 一种典型的对象逃逸就是:对象被复制给成员变量或者静态变量,可能被外部使用,此时变量就发生了逃逸。
  • 另一种典型的场景就是:对象通过return语句返回。如果对象通过return语句返回了,此时的程序并不能确定这个对象后续会不会被使用,外部的线程可以访问到这个变量,此时对象也发生了逃逸。
不同语言的语言类型和语法
  • 语言类型
  • 语法
  • 语言生态
    这前二者几乎大多数语言都是类似的,生态在web方面也是大同小异,相互“抄作业”
    区别还是在于语言的细节上,有编译器 ,也就是编译原理实现,语言的设计与实现

在这里插入图片描述