在我的应用程序中,我经常会传递对静态字符串的引用。我希望避免每次调用时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())
}
感谢您的帮助!
go tool: no such tool "6g"
,但是这个命令可以正常工作:go tool compile -S t.go
。 - psmith