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: