首页 > 后端开发 > Golang > 为什么我无法在 Go 中获取字符串文字的地址?

为什么我无法在 Go 中获取字符串文字的地址?

Mary-Kate Olsen
发布: 2024-12-10 01:00:11
原创
328 人浏览过

Why Can't I Take the Address of a String Literal in Go?

Go 中字符串文字的引用

在 Go 中获取字符串引用可以避免每次调用时分配内存,从而提高性能。但是,如下面示例中的 test1() 中所尝试的那样,直接获取对字符串文字的引用会引发问题。

var konnichiwa = `こんにちは世界`

// Gives the compile error `cannot take the address of "Hello world"`
func test1() (*string) { return &`Hello world` }
登录后复制

为什么这是不可能的?

由于语义不明确,禁止获取字符串文字的地址。这种歧义集中在引用是否应用于常量本身或常量的副本。获取常量的地址可能会因为允许修改其值而导致运行时错误。

最佳解决方案

最有效的解决方案,如 test2() 中所示,涉及使用指向现有变量的指针而不是字符串文字。这种方法比较冗长,但符合 Go 的语法并确保语义清晰。

// Works fine
func test2() (*string) {
    hej := `Hej världen`
    return &hej
}
登录后复制

异常:复合文字

语言规范对复合文字做了例外,如test3()所示。这允许创建匿名结构并随后检索其地址。

func test3() (*string) { return &struct {
        A int
        B int
    }{1, 2} }
登录后复制

虽然存在此异常,但处理静态字符串引用的推荐方法仍然是 test2(),因为它保持了简单性和清晰度.

以上是为什么我无法在 Go 中获取字符串文字的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板