¿La asignación entre alias activa la copia en Go?
Go permite la definición de tipos personalizados utilizando alias. Surgen dudas sobre si las conversiones entre estos tipos de alias dan como resultado copias o simplemente cambios estructurales.
Considere este ejemplo:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s) // Are ms or s2 a full copy of s?
Respuesta:
De acuerdo con las reglas de conversión de Go, las conversiones no constantes entre tipos numéricos o cadenas pueden generar un Costo de tiempo de ejecución debido a cambios de representación. Sin embargo, todas las demás conversiones, como aquellas entre alias, conservan la representación original sin crear copias.
Por lo tanto, tanto ms como s2 no son copias completas de s sino que hacen referencia al mismo valor subyacente. .
Impacto en las llamadas a funciones:
Al pasar valores a funciones, generalmente se crean copias. Sin embargo, esto no es válido para los tipos de alias. Asignar un valor tipo alias a un parámetro de función no activa la copia:
func foo(s MyString){ ... } foo(ms) // No copy is made when passing ms to foo()
En resumen, si bien las conversiones entre tipos de alias no crean copias del valor subyacente, este principio no se extiende a pasar valores a funciones donde generalmente se hacen copias.
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