mirror of
https://github.com/golang/go
synced 2024-10-14 11:53:56 +00:00
encoding/binary: document that Read requires exported struct fields
Add a test for the current behaviour. Fixes #7482. LGTM=adg R=golang-codereviews, adg CC=golang-codereviews https://golang.org/cl/95160043
This commit is contained in:
parent
0f52fdbf7b
commit
c00804c55c
|
@ -133,6 +133,7 @@ func (bigEndian) GoString() string { return "binary.BigEndian" }
|
|||
// When reading into structs, the field data for fields with
|
||||
// blank (_) field names is skipped; i.e., blank field names
|
||||
// may be used for padding.
|
||||
// When reading into a struct, all non-blank fields must be exported.
|
||||
func Read(r io.Reader, order ByteOrder, data interface{}) error {
|
||||
// Fast path for basic types and slices.
|
||||
if n := intDataSize(data); n != 0 {
|
||||
|
|
|
@ -265,6 +265,30 @@ func TestBlankFields(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// An attempt to read into a struct with an unexported field will
|
||||
// panic. This is probably not the best choice, but at this point
|
||||
// anything else would be an API change.
|
||||
|
||||
type Unexported struct {
|
||||
a int32
|
||||
}
|
||||
|
||||
func TestUnexportedRead(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
u1 := Unexported{a: 1}
|
||||
if err := Write(&buf, LittleEndian, &u1); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if recover() == nil {
|
||||
t.Fatal("did not panic")
|
||||
}
|
||||
}()
|
||||
var u2 Unexported
|
||||
Read(&buf, LittleEndian, &u2)
|
||||
}
|
||||
|
||||
type byteSliceReader struct {
|
||||
remain []byte
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue