在我的应用程序中,我将经常传递对静态字符串的引用.我希望避免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())
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
Go Newbie问题:我正在尝试使用默认值初始化以下结构.我知道如果"Uri"是一个字符串而不是指向字符串的指针(*string),它会起作用.但我需要这个指针来比较结构的两个实例,如果没有设置Uri将是nil,例如当我从json文件解组内容时.但是,如何将这样的结构正确地初始化为"静态默认"?
type Config struct {
Uri *string
}
func init() {
var config = Config{ Uri: "my:default" }
}
Run Code Online (Sandbox Code Playgroud)
上面的代码失败了
cannot use "string" (type string) as type *string in field value
Run Code Online (Sandbox Code Playgroud)