// run // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "encoding/json" ) type A[T any] struct { F1 string `json:"t1"` F2 T `json:"t2"` B B `json:"t3"` } type B struct { F4 int `json:"t4"` } func a[T any]() { data := `{"t1":"1","t2":2,"t3":{"t4":4}}` a1 := A[T]{} if err := json.Unmarshal([]byte(data), &a1); err != nil { panic(err) } if bytes, err := json.Marshal(&a1); err != nil { panic(err) } else if string(bytes) != data { panic(string(bytes)) } } func main() { a[int]() }