如何將類型的變量轉換**T為*unsafe.Pointer?下面的示例將給出編譯錯誤:無法將&ptr(** s類型)轉換為* unsafe.Pointer類型package mainimport ( "sync/atomic" "unsafe")type s struct { value int}func main(){ var ptr *s a := &s{42} old := ptr atomic.CompareAndSwapPointer( (*unsafe.Pointer)(&ptr), // &unsafe.Pointer(ptr) unsafe.Pointer(old), unsafe.Pointer(a))}如果切換(*unsafe.Pointer)(&ptr)到&unsafe.Pointer(ptr),我將收到此編譯錯誤:不能使用unsafe.Pointer(ptr)的地址附言 我選擇舉一個例子,sync/atomic因為在這種情況下,您實際上必須進行這種轉換。編輯一種不正確的解決方案是使用臨時變量:up := unsafe.Pointer(ptr)atomic.CompareAndSwapPointer(&up, ...編譯時,CAS只會交換存儲在中的內容up,而不交換ptr。正如zeebo @#go-nuts指出的那樣,這不是理想的結果。
在Go中將** T轉換為* unsafe.Pointer
慕的地6264312
2021-05-06 09:20:26
