1// Copyright 2017, 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 !appengine,!js 6 7package cmp 8 9import ( 10 "reflect" 11 "unsafe" 12) 13 14const supportAllowUnexported = true 15 16// unsafeRetrieveField uses unsafe to forcibly retrieve any field from a struct 17// such that the value has read-write permissions. 18// 19// The parent struct, v, must be addressable, while f must be a StructField 20// describing the field to retrieve. 21func unsafeRetrieveField(v reflect.Value, f reflect.StructField) reflect.Value { 22 return reflect.NewAt(f.Type, unsafe.Pointer(v.UnsafeAddr()+f.Offset)).Elem() 23} 24