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中文網其他相關文章!