You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
What steps will reproduce the problem?
1. Run the following program using Go tip. Go 1, and therefore play.golang.org, will not
work since their JSON encoder ignores embedded fields in a struct.
----------------------------------------
package main
import (
"encoding/json"
"fmt"
)
type IntType int
type MyStruct struct {
IntType
Name string
}
func main() {
var i IntType = 11
a := MyStruct{i, "test"}
jsonStr, err := json.Marshal(a)
fmt.Println(string(jsonStr), err)
}
----------------------------------------
What is the expected output?
A JSON serialization of a, something like {"IntType": 11, "Name":
"test"}.
What do you see instead?
----------------------------------------
panic: reflect: NumField of non-struct type [recovered]
panic: interface conversion: string is not error: missing method Error
goroutine 1 [running]:
----- stack segment boundary -----
encoding/json.func·002(0x101d0e90, 0x101d0100)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:220 +0x92
----- stack segment boundary -----
reflect.(*rtype).NumField(0x86878, 0xc, 0xc, 0x86878)
/Users/thomas.kappler/software/go/src/pkg/reflect/type.go:623 +0x7e
encoding/json.typeFields(0xc200042000, 0xb7868, 0xc200042000, 0xb7868, 0x0, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:607 +0x3a9
encoding/json.cachedTypeFields(0xc200042000, 0xb7868, 0x192, 0xc200042000, 0xb7868, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:694 +0xcb
encoding/json.(*encodeState).reflectValueQuoted(0xc200068000, 0xb7868, 0xc200043400,
0x192, 0x0, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:346 +0x19b5
encoding/json.(*encodeState).reflectValue(0xc200068000, 0xb7868, 0xc200043400, 0x192)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:252 +0x48
encoding/json.(*encodeState).marshal(0xc200068000, 0xb7868, 0xc200043400, 0x0, 0x0, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:223 +0x89
encoding/json.Marshal(0xb7868, 0xc200043400, 0xcd8e8, 0x4, 0xb7868, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:117 +0x60
main.main()
/Users/thomas.kappler/jsonEmbedded.go:19 +0x7f
----------------------------------------
Which compiler are you using (5g, 6g, 8g, gccgo)?
$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="EDITED/go"
GOROOT="EDITED/go"
GOTOOLDIR="EDITED/go/pkg/tool/darwin_amd64"
CGO_ENABLED="1"
Which operating system are you using?
Mac OS X 10.6.8
Which version are you using? (run 'go version')
go version devel +697f36fec52c Fri Nov 30 20:02:30 2012 +1100
Please provide any additional information below.
The text was updated successfully, but these errors were encountered:
Sorry, part of my stack trace is off by three lines because I inserted some println()s
in encode.go. It should be:
----- stack segment boundary -----
reflect.(*rtype).NumField(0x86778, 0xc200043480, 0xc200042000, 0x86778)
/Users/thomas.kappler/software/go/src/pkg/reflect/type.go:623 +0x7e
encoding/json.typeFields(0xc200042000, 0xb7768, 0xc200042000, 0xb7768, 0x0, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:604 +0x335
encoding/json.cachedTypeFields(0xc200042000, 0xb7768, 0x192, 0xc200042000, 0xb7768, ...)
/Users/thomas.kappler/software/go/src/pkg/encoding/json/encode.go:691 +0xcb
by tkappler:
The text was updated successfully, but these errors were encountered: