|  | // 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]() | 
|  | } |