// Copyright 2017, The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE.md file.// +build !puregopackagecmpimport("reflect""unsafe")constsupportExporters=true// retrieveUnexportedField uses unsafe to forcibly retrieve any field from// a struct such that the value has read-write permissions.//// The parent struct, v, must be addressable, while f must be a StructField// describing the field to retrieve.funcretrieveUnexportedField(vreflect.Value,freflect.StructField)reflect.Value{// See https://github.com/google/go-cmp/issues/167 for discussion of the// following expression.returnreflect.NewAt(f.Type,unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem()}