2 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
是的,這是可能的。使用reflect包獲取兩個(gè)實(shí)例的String Headersstring
。然后,你可以比較兩個(gè)的Data
和Len
領(lǐng)域來計(jì)算字符串?dāng)?shù)組的支持是否在內(nèi)存中確實(shí)重疊。
注意:StringHeader
struct 是一個(gè)實(shí)現(xiàn)細(xì)節(jié),語言規(guī)范中沒有提到它。因此,任何執(zhí)行上一段中討論的操作的代碼都不是真正可移植的 Go。IOW,我不鼓勵(lì)在好奇心/研究等之外使用此類代碼。來自文檔:
StringHeader 是字符串的運(yùn)行時(shí)表示。它不能安全或可移植地使用,其表示形式可能會(huì)在以后的版本中更改。此外,Data 字段不足以保證它引用的數(shù)據(jù)不會(huì)被垃圾收集,因此程序必須保留一個(gè)單獨(dú)的、正確類型的指向底層數(shù)據(jù)的指針。
編輯:
*reflect.StringHeader
hdr
從string
實(shí)例獲取 a 的未經(jīng)測(cè)試的代碼str
:
hdr := (*reflect.StringHeader)(unsafe.Pointer(&str))

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
string
s的程度是 Go 編譯器實(shí)現(xiàn)的細(xì)節(jié)。對(duì)于當(dāng)前gc
和gccgo
編譯器,相同的string
文字在編譯和鏈接時(shí)被保留。在運(yùn)行時(shí)生成的其他string
文字和string
s 不會(huì)被實(shí)習(xí)。
- 2 回答
- 0 關(guān)注
- 254 瀏覽
添加回答
舉報(bào)