diff --git a/src/encoding/gob/type.go b/src/encoding/gob/type.go index a26070713f8be8..72a8f30accf92c 100644 --- a/src/encoding/gob/type.go +++ b/src/encoding/gob/type.go @@ -8,6 +8,7 @@ import ( "encoding" "errors" "fmt" + "iter" "maps" "os" "reflect" @@ -899,6 +900,16 @@ func Register(value any) { RegisterName(name, value) } +// RegisteredTypes is list of registered type with their aliases +// that registered with [Register] or [RegisterName] methods +func RegisteredTypes() iter.Seq2[string, reflect.Type] { + return func(yield func(string, reflect.Type) bool) { + nameToConcreteType.Range(func(k, v any) bool { + return yield(k.(string), v.(reflect.Type)) + }) + } +} + func registerBasics() { Register(int(0)) Register(int8(0)) diff --git a/src/encoding/gob/type_test.go b/src/encoding/gob/type_test.go index 8d4c6d7ff9ac14..823c592b438f2c 100644 --- a/src/encoding/gob/type_test.go +++ b/src/encoding/gob/type_test.go @@ -260,3 +260,13 @@ func TestTypeRace(t *testing.T) { close(c) wg.Wait() } + +func TestRegisteredNames(t *testing.T) { + var names []string + for name, _ := range RegisteredTypes() { + names = append(names, name) + } + if len(names) < 34 { + t.Errorf("registered names should contains all primitive type") + } +}