La diferencia entre ir a hacer y hacer
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) p >
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
.