En mi aplicación, con frecuencia paso referencias a una cadena estática. Deseo evitar que Go asigne memoria para cada llamada, pero no pude obtener la dirección de mi cadena literal.Referencia a literales de cadenas en Go
¿Por qué no es posible tomar la dirección de un literal de cadena (ver test1()
en el ejemplo a continuación)? ¿He entendido mal la sintaxis, o es una limitación debido al funcionamiento interno de Go?
Si no es posible, ¿cuál sería la mejor solución?
test2()
funciona, pero ¿asignará la memoria para el var hej
cada vez?
test3()
no asignará ninguna memoria nueva, pero deseo evitar el desorden fuera de la función.
package main
import "fmt"
var konnichiwa = `こんにちは世界`
// Gives the compile error `cannot take the address of "Hello world"`
func test1() (*string) { return &`Hello world` }
// Works fine
func test2() (*string) {
hej := `Hej världen`
return &hej
}
func test3() (*string) { return &konnichiwa }
func main(){
fmt.Println(*test1())
fmt.Println(*test2())
fmt.Println(*test3())
}
¡Gracias por la ayuda!
Puedo entender el punto de ambigüedad. ¡Gracias por la explicación! – ANisus