在我的应用程序中,我会经常传递对静态字符串的引用。我希望避免让 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())
}
感谢帮助!