В своем приложении я часто буду передавать ссылки на статическую строку. Я не хочу, чтобы Go выделял память для каждого вызова, но мне не удалось получить адрес для моего строкового литерала.
Почему нельзя взять адрес строкового литерала (см. test1()
в примере ниже)? Я неправильно понял синтаксис или это ограничение из-за внутренней работы Go?
Если это невозможно, то какое решение было бы лучшим?
test2()
работает, но будет ли он каждый раз выделять память для var hej
?
test3()
не будет выделять новую память, но я хочу избежать беспорядка вне функции.
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())
}
Спасибо за помощь!