Source File
export.go
Belonging Package
github.com/google/go-cmp/cmp
// 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 file.package cmpimport ()// 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. If addr is false,// then the returned value will be shallowed copied to be non-addressable.func retrieveUnexportedField( reflect.Value, reflect.StructField, bool) reflect.Value {:= reflect.NewAt(.Type, unsafe.Pointer(uintptr(unsafe.Pointer(.UnsafeAddr()))+.Offset)).Elem()if ! {// A field is addressable if and only if the struct is addressable.// If the original parent value was not addressable, shallow copy the// value to make it non-addressable to avoid leaking an implementation// detail of how forcibly exporting a field works.if .Kind() == reflect.Interface && .IsNil() {return reflect.Zero(.Type)}return reflect.ValueOf(.Interface()).Convert(.Type)}return}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |