W mojej aplikacji będę często przekazywał odniesienia do statycznego ciągu znaków. Chciałbym uniknąć przydzielania pamięci do każdego wywołania, ale nie udało mi się uzyskać adresu na literał ciągu.Odsyłacz do literałów ciągów w Go
Dlaczego nie można pobrać adresu literału literowego (zob. test1()
w poniższym przykładzie)? Czy źle zrozumiałem składnię, czy też jest to ograniczenie ze względu na wewnętrzne działanie Go?
Jeśli nie jest możliwe, jakie byłoby najlepsze rozwiązanie?
test2()
działa, ale czy za każdym razem przydzieli pamięć dla?
Nie można przydzielić nowej pamięci, ale chcę uniknąć bałaganu poza funkcją.
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())
}
Dzięki za pomoc!
Potrafię zrozumieć punkt niejednoznaczności. Dzięki za wyjaśnienie! – ANisus