mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
reflect: omit anonymous field name from StructOf type string
This makes the reflect package match the compiler for StructOf with an embedded field. Fixes #24781 Change-Id: Ice64b167cbe0b9d30a953c5d8e2a86f3ad1158bf Reviewed-on: https://go-review.googlesource.com/c/go/+/567897 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@golang.org> Commit-Queue: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
f0d6ddfac0
commit
2ff89341f6
2 changed files with 17 additions and 2 deletions
|
|
@ -6112,6 +6112,20 @@ func TestStructOfTooLarge(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStructOfAnonymous(t *testing.T) {
|
||||||
|
var s any = struct{ D1 }{}
|
||||||
|
f := TypeOf(s).Field(0)
|
||||||
|
ds := StructOf([]StructField{f})
|
||||||
|
st := TypeOf(s)
|
||||||
|
dt := New(ds).Elem()
|
||||||
|
if st != dt.Type() {
|
||||||
|
t.Errorf("StructOf returned %s, want %s", dt.Type(), st)
|
||||||
|
}
|
||||||
|
|
||||||
|
// This should not panic.
|
||||||
|
_ = dt.Interface().(struct{ D1 })
|
||||||
|
}
|
||||||
|
|
||||||
func TestChanOf(t *testing.T) {
|
func TestChanOf(t *testing.T) {
|
||||||
// check construction and use of type not in binary
|
// check construction and use of type not in binary
|
||||||
type T string
|
type T string
|
||||||
|
|
|
||||||
|
|
@ -2287,8 +2287,9 @@ func StructOf(fields []StructField) Type {
|
||||||
// Update string and hash
|
// Update string and hash
|
||||||
name := f.Name.Name()
|
name := f.Name.Name()
|
||||||
hash = fnv1(hash, []byte(name)...)
|
hash = fnv1(hash, []byte(name)...)
|
||||||
|
if !f.Embedded() {
|
||||||
repr = append(repr, (" " + name)...)
|
repr = append(repr, (" " + name)...)
|
||||||
if f.Embedded() {
|
} else {
|
||||||
// Embedded field
|
// Embedded field
|
||||||
if f.Typ.Kind() == abi.Pointer {
|
if f.Typ.Kind() == abi.Pointer {
|
||||||
// Embedded ** and *interface{} are illegal
|
// Embedded ** and *interface{} are illegal
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue