Las diferencias entre el operador new() y "&"
En Go, la función new() y la dirección de memoria "&" Ambos operadores se utilizan para asignar memoria. Sin embargo, existen algunas diferencias sutiles entre su uso.
Comparación de funcionalidades
Tanto new() como & operator devuelven un puntero a una dirección de memoria recién asignada. Sin embargo, difieren en su sintaxis:
Análisis de tipos
Como se demuestra Según el ejemplo de código proporcionado, el análisis de reflexión muestra que tanto &Vector{} como new(Vector) devuelven punteros del mismo tipo, ya que ambos son punteros a instancias de la estructura Vector.
Confusión histórica
La lista de correo de Go ha discutido previamente preocupaciones sobre tener new() y & para la asignación de memoria, ya que puede generar confusión.
Especial Caso
Vale la pena señalar que new() es el único método para obtener un puntero a un tipo básico sin nombre, como un número entero. Esto se puede ver en el siguiente ejemplo:
p := new(int) // valid p := &int{0} // invalid
Preferencia y uso
En última instancia, la elección entre usar new() y & para la asignación de memoria es en gran medida una cuestión de preferencia personal. Ambos métodos tienen la misma funcionalidad y producen los mismos resultados. Sin embargo, es importante ser consciente de las diferencias sutiles entre los dos operadores y utilizarlos adecuadamente según los requisitos específicos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3