reflect: add Type.String()
Этот коммит содержится в:
родитель
7654d86d2c
коммит
90af41d089
2 изменённых файлов: 52 добавлений и 1 удалений
|
@ -59,6 +59,7 @@
|
||||||
package reflect
|
package reflect
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"internal/itoa"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -487,7 +488,40 @@ func pointerTo(t *rawType) *rawType {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *rawType) String() string {
|
func (t *rawType) String() string {
|
||||||
return "T"
|
if t.isNamed() {
|
||||||
|
// TODO(dgryski): `main` until pkgPath support lands
|
||||||
|
return "<unknown>" + "." + t.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t.Kind() {
|
||||||
|
case Chan:
|
||||||
|
return "chan " + t.elem().String()
|
||||||
|
case Pointer:
|
||||||
|
return "*" + t.elem().String()
|
||||||
|
case Slice:
|
||||||
|
return "[]" + t.elem().String()
|
||||||
|
case Array:
|
||||||
|
return "[" + itoa.Itoa(t.Len()) + "]" + t.elem().String()
|
||||||
|
case Map:
|
||||||
|
return "map[" + t.key().String() + "]" + t.elem().String()
|
||||||
|
case Struct:
|
||||||
|
s := "struct {"
|
||||||
|
numField := t.NumField()
|
||||||
|
for i := 0; i < numField; i++ {
|
||||||
|
f := t.rawField(i)
|
||||||
|
s += " " + f.Name + " " + f.Type.String()
|
||||||
|
// every field except the last needs a semicolon
|
||||||
|
if i < numField-1 {
|
||||||
|
s += ";"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s += " }"
|
||||||
|
return s
|
||||||
|
default:
|
||||||
|
return t.Kind().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
return t.Kind().String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *rawType) Kind() Kind {
|
func (t *rawType) Kind() Kind {
|
||||||
|
|
|
@ -221,6 +221,23 @@ func TestNamedTypes(t *testing.T) {
|
||||||
t.Errorf("TypeOf.Name()=%v, want %v", got, want)
|
t.Errorf("TypeOf.Name()=%v, want %v", got, want)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if got, want := TypeOf(map[[4]uint16]string{}).String(), "map[[4]uint16]string"; got != want {
|
||||||
|
t.Errorf("Type.String()=%v, want %v", got, want)
|
||||||
|
}
|
||||||
|
|
||||||
|
s := struct {
|
||||||
|
a int8
|
||||||
|
b int8
|
||||||
|
c int8
|
||||||
|
d int8
|
||||||
|
e int8
|
||||||
|
f int32
|
||||||
|
}{}
|
||||||
|
|
||||||
|
if got, want := TypeOf(s).String(), "struct { a int8; b int8; c int8; d int8; e int8; f int32 }"; got != want {
|
||||||
|
t.Errorf("Type.String()=%v, want %v", got, want)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func equal[T comparable](a, b []T) bool {
|
func equal[T comparable](a, b []T) bool {
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче