首頁 > 後端開發 > Golang > 為什麼我無法在 Go 中取得字串文字的位址?

為什麼我無法在 Go 中取得字串文字的位址?

Mary-Kate Olsen
發布: 2024-12-10 01:00:11
原創
334 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板