reflect: make sure null bytes are supported in tags
Этот коммит содержится в:
родитель
012bdfae80
коммит
ebb410afd9
2 изменённых файлов: 19 добавлений и 18 удалений
7
testdata/reflect.go
предоставленный
7
testdata/reflect.go
предоставленный
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strconv"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,8 +18,8 @@ type (
|
||||||
Y int16
|
Y int16
|
||||||
}
|
}
|
||||||
mystruct struct {
|
mystruct struct {
|
||||||
n int `foo:"bar"`
|
n int `foo:"bar"`
|
||||||
some point
|
some point "some\x00tag"
|
||||||
zero struct{}
|
zero struct{}
|
||||||
buf []byte
|
buf []byte
|
||||||
Buf []byte
|
Buf []byte
|
||||||
|
@ -480,7 +481,7 @@ func showValue(rv reflect.Value, indent string) {
|
||||||
for i := 0; i < rv.NumField(); i++ {
|
for i := 0; i < rv.NumField(); i++ {
|
||||||
field := rt.Field(i)
|
field := rt.Field(i)
|
||||||
println(indent+" field:", i, field.Name)
|
println(indent+" field:", i, field.Name)
|
||||||
println(indent+" tag:", field.Tag)
|
println(indent+" tag:", strconv.Quote(string(field.Tag)))
|
||||||
println(indent+" embedded:", field.Anonymous)
|
println(indent+" embedded:", field.Anonymous)
|
||||||
println(indent+" exported:", field.IsExported())
|
println(indent+" exported:", field.IsExported())
|
||||||
showValue(rv.Field(i), indent+" ")
|
showValue(rv.Field(i), indent+" ")
|
||||||
|
|
30
testdata/reflect.txt
предоставленный
30
testdata/reflect.txt
предоставленный
|
@ -233,7 +233,7 @@ reflect type: struct
|
||||||
reflect type: struct
|
reflect type: struct
|
||||||
struct: 1
|
struct: 1
|
||||||
field: 0 error
|
field: 0 error
|
||||||
tag:
|
tag: ""
|
||||||
embedded: true
|
embedded: true
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: interface caninterface=false
|
reflect type: interface caninterface=false
|
||||||
|
@ -242,19 +242,19 @@ reflect type: struct
|
||||||
reflect type: struct
|
reflect type: struct
|
||||||
struct: 3
|
struct: 3
|
||||||
field: 0 a
|
field: 0 a
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: uint8 caninterface=false
|
reflect type: uint8 caninterface=false
|
||||||
uint: 42
|
uint: 42
|
||||||
field: 1 b
|
field: 1 b
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: int16 caninterface=false
|
reflect type: int16 caninterface=false
|
||||||
int: 321
|
int: 321
|
||||||
field: 2 c
|
field: 2 c
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: int8 caninterface=false
|
reflect type: int8 caninterface=false
|
||||||
|
@ -262,37 +262,37 @@ reflect type: struct
|
||||||
reflect type: struct comparable=false
|
reflect type: struct comparable=false
|
||||||
struct: 5
|
struct: 5
|
||||||
field: 0 n
|
field: 0 n
|
||||||
tag: foo:"bar"
|
tag: "foo:\"bar\""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: int caninterface=false
|
reflect type: int caninterface=false
|
||||||
int: 5
|
int: 5
|
||||||
field: 1 some
|
field: 1 some
|
||||||
tag:
|
tag: "some\x00tag"
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: struct caninterface=false
|
reflect type: struct caninterface=false
|
||||||
struct: 2
|
struct: 2
|
||||||
field: 0 X
|
field: 0 X
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: true
|
exported: true
|
||||||
reflect type: int16 caninterface=false
|
reflect type: int16 caninterface=false
|
||||||
int: -5
|
int: -5
|
||||||
field: 1 Y
|
field: 1 Y
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: true
|
exported: true
|
||||||
reflect type: int16 caninterface=false
|
reflect type: int16 caninterface=false
|
||||||
int: 3
|
int: 3
|
||||||
field: 2 zero
|
field: 2 zero
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: struct caninterface=false
|
reflect type: struct caninterface=false
|
||||||
struct: 0
|
struct: 0
|
||||||
field: 3 buf
|
field: 3 buf
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: slice caninterface=false comparable=false
|
reflect type: slice caninterface=false comparable=false
|
||||||
|
@ -306,7 +306,7 @@ reflect type: struct comparable=false
|
||||||
reflect type: uint8 addrable=true caninterface=false
|
reflect type: uint8 addrable=true caninterface=false
|
||||||
uint: 111
|
uint: 111
|
||||||
field: 4 Buf
|
field: 4 Buf
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: true
|
exported: true
|
||||||
reflect type: slice comparable=false
|
reflect type: slice comparable=false
|
||||||
|
@ -322,14 +322,14 @@ reflect type: ptr
|
||||||
reflect type: struct settable=true addrable=true
|
reflect type: struct settable=true addrable=true
|
||||||
struct: 2
|
struct: 2
|
||||||
field: 0 next
|
field: 0 next
|
||||||
tag: description:"chain"
|
tag: "description:\"chain\""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: ptr addrable=true caninterface=false
|
reflect type: ptr addrable=true caninterface=false
|
||||||
pointer: false struct
|
pointer: false struct
|
||||||
nil: true
|
nil: true
|
||||||
field: 1 foo
|
field: 1 foo
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: false
|
exported: false
|
||||||
reflect type: int addrable=true caninterface=false
|
reflect type: int addrable=true caninterface=false
|
||||||
|
@ -337,13 +337,13 @@ reflect type: ptr
|
||||||
reflect type: struct
|
reflect type: struct
|
||||||
struct: 2
|
struct: 2
|
||||||
field: 0 A
|
field: 0 A
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: true
|
exported: true
|
||||||
reflect type: uintptr
|
reflect type: uintptr
|
||||||
uint: 2
|
uint: 2
|
||||||
field: 1 B
|
field: 1 B
|
||||||
tag:
|
tag: ""
|
||||||
embedded: false
|
embedded: false
|
||||||
exported: true
|
exported: true
|
||||||
reflect type: uintptr
|
reflect type: uintptr
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче