Hace poco estaba atado en nudos sobre algo similar.
Primera hablando de cadenas en el ejemplo es una distracción, utilizar una estructura en su lugar, vuelva a escribir a algo así como:
func a() MyStruct {
/* doesn't matter */
}
var b *MyStruct = &a()
Esto no compilará porque no se puede tomar la dirección de una(). Así que haga lo siguiente:
func a() MyStruct {
/* doesn't matter */
}
tmpA := a()
var b *MyStruct = &tmpA
Esto compilará, pero que ha devuelto un MyStruct en la pila, asignado espacio suficiente en el montón para almacenar un MyStruct, luego se copia el contenido de la pila a la pila. Si se quiere evitar esto, a continuación, escribir así:
func a2() *MyStruct {
/* doesn't matter as long as MyStruct is created on the heap (e.g. use 'new') */
}
var a *MyStruct = a2()
copia normalmente es barato, pero esas estructuras podrían ser grandes. Peor aún cuando quiere modificar la estructura y hacer que 'pegue' no puede copiar y luego modificar las copias.
De todos modos, se vuelve aún más divertido cuando está utilizando un tipo de interfaz de retorno {}. La interfaz {} puede ser la estructura o un puntero a una estructura. El mismo problema de copiado surge.
¿Qué quieres lograr con la construcción en cuestión? – Wolf