github.com/integration-system/go-cmp@v0.0.0-20190131081942-ac5582987a2f/cmp/internal/value/pointer_unsafe.go (about) 1 // Copyright 2018, The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE.md file. 4 5 // +build !purego 6 7 package value 8 9 import ( 10 "reflect" 11 "unsafe" 12 ) 13 14 // Pointer is an opaque typed pointer and is guaranteed to be comparable. 15 type Pointer struct { 16 p unsafe.Pointer 17 t reflect.Type 18 } 19 20 // PointerOf returns a Pointer from v, which must be a 21 // reflect.Ptr, reflect.Slice, or reflect.Map. 22 func PointerOf(v reflect.Value) Pointer { 23 // The proper representation of a pointer is unsafe.Pointer, 24 // which is necessary if the GC ever uses a moving collector. 25 return Pointer{unsafe.Pointer(v.Pointer()), v.Type()} 26 }