Red de conocimiento informático - Aprendizaje de programación - La diferencia entre ir a hacer y hacer

La diferencia entre ir a hacer y hacer

new se utiliza principalmente para la inicialización de estructuras

make se utiliza para la inicialización de matrices, sectores y canales de conexión

Ejemplo: usuarios:=make([10]int);

msg:=make(chan int);

nuevo asigna espacio de estructura y lo inicializa a cero sin inicialización adicional

Después de nuevo, necesita un puntero a este puntero a la estructura

make asigna el espacio de la estructura y sus dependencias, y completa la inicialización de los punteros intermedios

make devuelve este espacio de la estructura sin asignar un puntero separado

nuevo ejemplo:

var p *[]int = new([]int)

o

p := new([]int)

La operación anterior asigna una estructura de fragmento, pero el puntero ptr en la estructura que debería apuntar a la matriz subyacente es nulo, por lo que en realidad no puede acceder a los datos dentro del fragmento

En el Al mismo tiempo, también asigna un puntero p, que (en sistemas de 32 bits) ocupa 4 bytes y contiene la dirección de la estructura del fragmento

Ejemplo make:

v []int = make([] int, 0)

v := make([]int, 0)

La operación anterior asigna una estructura de segmento con un puntero ptr, que debe apuntar a la matriz subyacente. El puntero ptr en la estructura debe apuntar a la matriz subyacente, y la matriz subyacente debe asignarse, para que el segmento esté listo para su uso

Tenga en cuenta que v es la estructura del segmento, no un puntero al segmento

Lo anterior es solo un ejemplo, el uso general de longitud y capacidad se explicará a continuación: v := make([]int, 10, 50)

v := make( []int, 0 )

Lo anterior es sólo un ejemplo. 10, 50)

Conclusión:

Como se puede ver en lo anterior, tiene poca importancia usar new para asignar sectores, porque no se puede usar directamente sin una inicialización adecuada

Para estructuras con espacio adicional, después de la inicialización con make, los punteros internos se pueden inicializar y usar inmediatamente

.