1 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
mcef @#go-nuts發(fā)布了如何轉(zhuǎn)換** T的答案:
(* unsafe.Pointer)(unsafe.Pointer(ptr)),其中ptr的類型為** T。
zeebo @#go-nuts提供了一個(gè)工作示例(經(jīng)許可在此處發(fā)布):
package main
import (
"fmt"
"sync/atomic"
"unsafe"
)
type T struct {
value int
}
func Swap(dest **T, old, new *T) bool {
udest := (*unsafe.Pointer)(unsafe.Pointer(dest))
return atomic.CompareAndSwapPointer(udest,
unsafe.Pointer(old),
unsafe.Pointer(new),
)
}
func main() {
x := &T{42}
n := &T{50}
fmt.Println(*x, *n)
p := x
Swap(&x, p, n)
fmt.Println(*x, *n)
}
- 1 回答
- 0 關(guān)注
- 211 瀏覽
添加回答
舉報(bào)