notas ir a estudiar el desarrollo del núcleo (Nianer) - la diferencia entre la función y el método

La diferencia entre las funciones y los métodos

  1. El paso de parámetros de función, tipo de valor es un tipo de valor, un tipo de referencia es un tipo de referencia, no se pueden mezclar, no el parámetro de tipo de valor puntero pasado.
  2. Parámetro que pasa método, dependiendo de la func tipos de valor y de referencia (x x_type) () {...} -> x_type o * x_type
  3. parámetro X pasó ya sea en un tipo de puntero o valor de tipo aquí puede pasar compilador y se procesa de la misma manera, es decir == x y x, se ilustra <variables de estructura> <estructura de campo> == <Estructura y cuerpo variable> <estructura de campo>, my.Name == (y mi) .Nombre
  4. variables de estructura delanteros entrantes descritos, el método no se puede cambiar más tarde en el valor del campo específico del proceso de inicialización depende del tipo de x_type, es coherente con esta función, la función del tipo MyLIST cambio de valor de campo de asignación no afecta a la main () para inicializar el campo de valor, * myLIST valor del campo tipo se le asigna la función de la principal impacto () inicializa el cambio de valores de campo.

A menudo cavando entrevista es aquí, por ejemplo, las siguientes instrucciones de programa

package main

import "fmt"

type Mylist struct {
	Name string
	Age string
}

func (my Mylist) value_type() {
	fmt.Println("都能传,但是到这儿都是值类型")
}

func (my *Mylist) ptr_type() {
	my.Name = "zzz"
	fmt.Println("都能传,但是到这儿都是引用类型")
}

func ptr1_type(my *Mylist) {
	fmt.Println("只能传指针类型")
}

func value1_type(my Mylist) {
	fmt.Println("只能传值类型")
}

func main() {
	var my Mylist          //定义一个结构体实例
	my.Name = "lululu"     //初始化结构体实例my中的字段Name为"lululu"
	
	my.value_type()         //对于方法中,由于编译器优化,传递的结构体变量既可以是值也可以是地址
	fmt.Println(my.Name)    //无论是my为值还是地址,最终传递给绑定变量的都是值拷贝
	(&my).value_type()      
	fmt.Println((&my).Name)

	my.ptr_type()           //但是具体的my.Name的值还是要看结构体绑定变量到底是值类型还是指针类型
	fmt.Println(my.Name)    //结构体变量为值类型,则方法内值的改变不影响main()中初始化变量的值
	(&my).ptr_type()        //结构体变量若为引用类型,则方法内值的改变影响main()中初始化变量的值
	fmt.Println((&my).Name)

	value1_type(my)         //函数中不存在传入绑定变量,所以和之前一样,值类型只能传值类型,地址类型只能传地址类型,不可my和&my代表一个意思
	ptr1_type(&my)          //值类型函数内的改变不影响main()初始化变量的值,引用类型函数内的改变影响main()初始化变量的值,
}
Publicado 49 artículos originales · alabanza ganado 18 · vistas 4005

Supongo que te gusta

Origin blog.csdn.net/weixin_41047549/article/details/90142613
Recomendado
Clasificación